如何为此结果创建透视查询?

时间:2014-12-28 07:13:27

标签: sql sql-server sql-server-2008 sql-server-2005 pivot

我从查询得到了结果:

TITAL   PCS RGH_CTS    VALUE
-----   --- -------    ------------ 
SEND    10  49.8550    198742.94400
BID     15  76.7070    327461.76300
FINAL   19  88.5630    337954.15600

我想要这个输出 - 如何解决这个问题?

| TITAL     |    SEND      |    BID       |   FINAL      |
----------------------------------------------------------
| PCS       |     10       |    15        |     19       |
| RGH_CTS   |   49.8550    |  76.7070     |   88.5630    |
| VALUE     | 198742.94400 | 327461.76300 | 337954.15600 |

任何团体都可以解决这个简单的查询吗?

3 个答案:

答案 0 :(得分:3)

您需要结合PivotUnpivot才能获得结果。

首先Unpivot使用Cross Apply在单列中获取数据的表{/ 1}。

下一步Pivot获取结果的上一步结果。

SELECT Tital, 
       [SEND],
       [BID],
       [FINAL]
FROM   (SELECT t.TITAL AS tt,
               c.TITAL,
               cdata
        FROM   Tablename t
               CROSS apply ( VALUES ('PCS',[PCS]),
                                    ('RGH_CTS',[RGH_CTS]),
                                    ('VALUE',VALUE) ) c (TITAL, cdata)) a
       PIVOT (Max(cdata)
             FOR tt IN([SEND],
                       [BID],
                       [FINAL])) piv 

SQLFIDDLE DEMO

答案 1 :(得分:0)

根据NoDisplayName,您需要首先完成UNPIVOT,然后重新PIVOTing数据进行完整转置。您还可以使用相同名称的关键字UNPIVOT数据:

SELECT Criteria as TITAL, [SEND], [BID], [FINAL]
FROM
(
    SELECT 
        *
    FROM 
        Result
    UNPIVOT 
    (
       SomeColumn
       for Criteria in (PCS, RGH_CTS, VALUE)
    ) unpvt

) X
PIVOT
(
   SUM(SomeColumn)
   for [TITAL] IN ([SEND], [BID], [FINAL])
)pvt;

请注意,在转置后保留LHS列名称是相当不寻常的(即TITAL似乎完全在转置前和转换后的数据中引用不同的主题)?

SqlFiddle here

答案 2 :(得分:-1)

由于您使用的是SQL Server 2005+,因此可以使用PIVOT/UNPIVOT

编辑:我在编辑问题之前发布了这个,使其更清晰。