我从查询得到了结果:
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 |
任何团体都可以解决这个简单的查询吗?
答案 0 :(得分:3)
您需要结合Pivot
和Unpivot
才能获得结果。
首先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
答案 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
似乎完全在转置前和转换后的数据中引用不同的主题)?
答案 2 :(得分:-1)
由于您使用的是SQL Server 2005+,因此可以使用PIVOT/UNPIVOT
编辑:我在编辑问题之前发布了这个,使其更清晰。