2009-12-10 55 views
1

我无法尝试转移下表。sql server unpivoting表

|操作| ...其他列... | A1 | B1 | C1 | A2 | B2 | C2 | A3 | B3 | C3 | ... |

变成这样的东西...

|操作| ...其他列... | AValue | BValue | CValue |

现在即时通讯做这样

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 
) 

的问题是,我有30套的ABC,所以30个工会。我尝试过使用unpivot,但我一直无法提出正确的解决方案,这是我第一次尝试使用它。

这是我尝试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 

的问题是,我不明白为什么返回行的数以百万计,当预期应该是10K左右。有任何想法吗?

编辑:我刚刚意识到,每个UNPIVOT与导致“数据爆炸”的前一个unpivot语句的结果集一起工作。

感谢

回答

1

完成! Plamen Ratchev给了我最后的帮助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

我不是你要找的太清楚,但你可以试试“联盟”,而不是“UNION ALL”。