2009-12-10 28 views
1

Je n'arrive pas à essayer de dériver le tableau suivant.Table de serveur sans table SQL Server

| opération | ... autres colonnes ... | A1 | B1 | C1 | A2 | B2 | C2 | A3 | B3 | C3 | ... | Dans quelque chose comme ça ...

| opération | ... autres colonnes ... | AValue | BValue | CValue |

En ce moment im faire comme ça

SELECT operation , ...other columns , Avalue, BValue , CValue 
FROM (SELECT operation, ...other columns, A1, B1, C1 
     FROM MyTable 

     UNION ALL 

     SELECT operation, ...other columns, A2, B2, C2 
     FROM MyTable 

     UNION ALL 

     SELECT operation, ...other columns, A3, B3, C3 
     FROM MyTable 
) 

Le problème est que j'ai 30 séries de ABC, donc 30 syndicats. J'ai essayé d'utiliser unpivot mais je n'ai pas réussi à trouver la bonne solution, c'est la première fois que j'essaie de l'utiliser.

Ceci est ma tentative usign UNPIVOT

SELECT opration 
     , ...other columns ... 
     ,AValue 
     ,BValue 
     ,CValue 
FROM  MyTable 
UNPIVOT ([AValue] FOR XX IN (A1,A2,A3,...,A30)) AS upv1 
UNPIVOT ([BValue] FOR yy IN (B1,B2,B3,...,B30)) AS upv2 
UNPIVOT ([CValue] FOR ZZ IN (C1,C2,C3,...,C30)) AS upv3 

Le problème est que je ne comprends pas pourquoi est de retour des millions de lignes, quand l'attendu devrait être d'environ 10 km. Des idées?

EDIT: Je viens de réaliser que chaque UNPIVOT fonctionne avec le jeu de résultats de l'instruction unpivot précédente qui cause l'explosion des données.

Merci

Répondre

1

Fait! Plamen Ratchev m'a donné l'aide finale here

SELECT opration 
     , ...other columns ... 
     ,AValue 
     ,BValue 
     ,CValue 
FROM  MyTable 
UNPIVOT ([AValue] FOR XX IN (A1,A2,A3,...,A30)) AS upv1 
UNPIVOT ([BValue] FOR yy IN (B1,B2,B3,...,B30)) AS upv2 
UNPIVOT ([CValue] FOR ZZ IN (C1,C2,C3,...,C30)) AS upv3 
WHERE RIGHT(XX, 2) = RIGHT(YY, 2) 
    AND RIGHT(XX, 2) = RIGHT(ZZ, 2) 
0

Je ne suis pas trop clair sur ce que vous cherchez, mais vous pouvez essayer « union » et non pas « union tous ».