Bonjour à tous,
Je souhaites récupérer une liste de valeur pour une donnée particulière au sein d'un table dont je ne connais pas le nombre de colonne (Import fichier Excel) puis réaliser un UNPIVOT pour obtenir la liste des ces valeurs.
Voici la table filtrée sur la valeur 'REF' dont je souhaites récupérer les valeurs (seules les valeurs 'F%'):
F1 Semaine de livraison en nombre d'uvc F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 REF 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
Et voici le résultat attendu :
columns value F1 REF F3 40 F4 41 F5 42 F6 43 F7 44 F8 45 F9 46 F10 47 F11 48 F12 49 F13 50 F14 51 F15 52 F16 53
Voici donc le code que j'ai utilisé :
Mon souci est que cette requête, me retourne le message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 DECLARE @cols AS NVARCHAR(MAX); DECLARE @query AS NVARCHAR(MAX); select @cols = STUFF((SELECT distinct ',' + QUOTENAME(column_name) FROM [DATA_EXT].information_schema.columns WHERE table_name = 'EXCEL_PREV' AND COLUMN_NAME LIKE 'F%' FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') , 1, 1, ''); SELECT @query = ' SELECT columns, value FROM (SELECT * FROM [DATA_EXT].[dbo].[EXCEL_PREV] WHERE [F1] = ''REF'') d UNPIVOT ( value FOR columns IN('+ @cols + ') ) AS u ' EXECUTE(@query);
Le type de colonne "F10" est en conflit avec le type d'autres colonnes spécifiées dans la liste UNPIVOT.
D'après ce que j'ai pu trouver en recherchant, c'est qu'il s'agit à priori d'une erreur de conversion.
Par conséquent, j'ai essayé en faisant un CAST de chacune des colonnes et cela fonctionne mais ce n'est pas dynamique comme je le souhaites.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 SELECT @query = ' SELECT columns, value FROM (SELECT [F1] ,CAST([F3] As FLOAT) As [F3] ,CAST([F4] As FLOAT) As [F4] ,CAST([F5] As FLOAT) As [F5] ,CAST([F6] As FLOAT) As [F6] ,CAST([F7] As FLOAT) As [F7] ,CAST([F8] As FLOAT) As [F8] ,CAST([F9] As FLOAT) As [F9] ,CAST([F10] As FLOAT) As [F10] ,CAST([F11] As FLOAT) As [F11] ,CAST([F12] As FLOAT) As [F12] ,CAST([F13] As FLOAT) As [F13] ,CAST([F14] As FLOAT) As [F14] ,CAST([F15] As FLOAT) As [F15] ,CAST([F16] As FLOAT) As [F16] FROM [DATA_EXT].[dbo].[EXCEL_PREV] WHERE [F1] = ''REF'') d UNPIVOT ( value FOR columns IN([F3] ,[F4] ,[F5] ,[F6] ,[F7] ,[F8] ,[F9] ,[F10] ,[F11] ,[F12] ,[F13] ,[F14] ,[F15] ,[F16]) ) AS u ' EXECUTE(@query);
J'en viens donc à vous demander comment je pourrais réaliser mon UNPIVOT et un CAST dynamique sur les colonnes en même temps svp ?
Je vous remercie par avance pour votre aide![]()
Partager