2010-07-06 7 views
-1

Je suis en train de achive ceci:Conversion des lignes à colonnes avec le nombre inconnu d'éléments

tableau initial:

PARM1 |PARM2 |DATE 
------------------- 
VALUE1|VALUE2|DATE1 

VALUE3|VALUE4|DATE2 

Résultat final:

PARM |DATE1 |DATE2 |... 
----------------------- 
PARM1|VALUE1|VALUE3|... 

PARM2|VALUE2|VALUE4|... 

En bref, je veux convertir mes les noms des paramètres en lignes et d'avoir une colonne pour chaque date, où les cellules contiennent les valeurs des paramètres pour la date et le paramètre.

Jusqu'à présent, je réussi à obtenir ceci:

SELECT * 
FROM 
(
    SELECT [Parameter], [DATE], VALUE 
    FROM 
    (
     SELECT PARM1, PARM2 FROM PARAMETER_VALUES 
    ) SOURCE_TABLE 
    UNPIVOT 
    (
     VALOR FOR [Parameter] IN (PARM1, PARM2) 
    ) UNPIVOTED_TABLE 
) T 

Le problème est, je ne peux pas PIVOT les résultats, parce que je ne sais pas combien il y a DATEs. Je veux que ce soit dynamique.

Est-ce possible?

+0

sons comme une structure EAV qui est venu à vous mordre dans le derrière. Fondamentalement, les bases de données ne sont pas conçues pour générer dynamiquement des colonnes. Donc, si c'est ce que vous voulez faire, vous devriez le faire en dehors de la base de données dans un composant de niveau intermédiaire ou un outil de reporting. – Thomas

+0

Si vous postez du code, XML ou des structures fixes, ** mettez en surbrillance ces lignes dans l'éditeur de texte et cliquez sur le bouton "code" (101 010) dans la barre d'outils de l'éditeur pour le mettre en valeur! –

Répondre

0

En bref, vous ne pouvez pas utiliser la commande PIVOT avec des colonnes inconnues.

Votre seule option est de récupérer les données et reformater, en utilisant SQL dynamique ou une sorte de fin avant.

0

Vous pouvez pivoter à l'aide des colonnes dynamiques, si vous construisez le pivot avant la main.

SELECT @listColYouwantInPivot= STUFF((SELECT distinct '], [' + [columnName] 
          FROM  tableName 
         FOR 
          XML PATH('') 
         ), 1, 2, '') + ']' 

Il suffit de brancher @listColYouwantInPivot dans le compte de pivot avec une concaténation après.

Questions connexes