在多个列上的数据透视表

时间:2012-02-26 14:55:30

标签: sql sql-server-ce pivot multiple-columns

我有一个查询给我这个结果:

|SystemName    |SystemDescription   |CertificateType |CertName  |CertDate  |
----------------------------------------------------------------------------
| ABC          |Blah-blah ABC       | X             | X-865567  | 1 Jan    |
| ABC          |Blah-blah ABC       | Y             | Y-8a5567  | 2 Jan    |
| ABC          |Blah-blah ABC       | Z             | Z-86af67  | 3 Jan    |
| EFG          |Blah-blah EFG       | X             | X-8kuhkj  | 4 Jan    |
| EFG          |Blah-blah EFG       | Y             | Y-uiiou   | 5 Jan    |
| EFG          |Blah-blah EFG       | Z             | Z-8lkjhu  | 6 Jan    |
----------------------------------------------------------------------------

我需要产生这样的结果:

|SystemName |SystemDescription   | X-Name  | X-Date | Y-Name | Y-Date | Z-Name | Z-Date|
---------------------------------------------------------------------------------------
|ABC        | Blah-blah ABC      |X-865567 | 1 Jan  |Y-8a5567| 2 Jan  |Z-86af67| 3 Jan |
|EFG        | Blah-blah EFG      |X-8kuhkj | 4 Jan  |Y-uiiou | 5 Jan  |Z-8lkjhu| 6 Jan |
----------------------------------------------------------------------------------------

换句话说,我需要在没有聚合的情况下进行旋转,并且至少有两列没有旋转。 是否可以在没有函数,存储过程和临时表的情况下生成它?我知道如何使用一些功能轻松实现这一点,我可以提出临时表的解决方案。

我想知道是否有可能使用PIVOT获得一个简洁的解决方案?

P.S。这不是一个功课,只是一个脑筋急转弯 - )

1 个答案:

答案 0 :(得分:1)

没有必要使用PIVOT来执行此操作,有时使用它比使用它更麻烦。至于不使用聚合函数 - 考虑一下,您希望按照SystemNameSystemDescription对记录进行分组,您无法选择使用聚合。没关系,只要像我一样使用MAX,你就可以得到你想要的结果。您唯一需要担心的是,有两个记录具有相同SystemNameSystemDescriptionCertificationType的{​​{1}}或{{CertName值不同的情况1}} - 在这种情况下,您需要一些方法来选择为该组选择哪些属性。

这是一个非Pivot示例:

CertDate