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é :

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);
Mon souci est que cette requête, me retourne le message d'erreur suivant :
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