简体   繁体   English

SQL PIVOT 生成所需的输出

[英]SQL PIVOT to generate required output

Please see the data below:请看以下数据:

在此处输入图片说明

I am looking for a query that generates the following output:我正在寻找生成以下输出的查询:

在此处输入图片说明

I am experimenting with 'PIVOT', but have not yet achieved the desired outcome.我正在试验“PIVOT”,但尚未达到预期的结果。

This should work:这应该有效:

SELECT ReviewType, DER, LEI, NOR, [NOT], LIN
FROM Src
PIVOT (SUM(Total) FOR OwningAgency IN (DER, LEI, NOR, [NOT], LIN)) P

Simple pivoting:简单的旋转:

SELECT *
FROM YourTable
PIVOT (
    MAX(Total) FOR OwningAgency IN ([DER],[LEI],[NOR],[NOT],[LIN])
) pvt

Another way:其它的办法:

SELECT  ReviewType,
        CASE WHEN OwningAgency = 'DER' THEN MAX(Total) END [DER],
        CASE WHEN OwningAgency = 'LEI' THEN MAX(Total) END [LEI],
        CASE WHEN OwningAgency = 'NOR' THEN MAX(Total) END [NOR],
        CASE WHEN OwningAgency = 'NOT' THEN MAX(Total) END [NOT],
        CASE WHEN OwningAgency = 'LIN' THEN MAX(Total) END [LIN]
FROM YourTable
GROUP BY ReviewType,OwningAgency

Use dynamic column collection to select PIVOT Data , because it gives you any new column value added in table, suppose after 2-3 days if new OwningAgency say for XYZ added in your table even that it show your new column in PIVOT result:使用动态列集合来选择 PIVOT Data ,因为它为您提供了表中添加的任何新列值,假设在 2-3 天后,如果新的 OwningAgency说您的表中添加了 XYZ,即使它在 PIVOT结果中显示您的新列

CREATE TABLE tblOwningAgency
 (
   OwningAgency  VARCHAR(50),
   ReviewType CHAR(1),
   Total INT
 )  

 INSERT INTO tblOwningAgency VALUES('DER','E',584)
 ,('LEI','S',84)
 ,('NOR','S',28148)
 ,('LIN','S',1261)
 ,('DER','T',6310)
 ,('NOR','T',5527)
 ,('NOT','T',35705)
 ,('LIN','E',606)
 ,('NOT','S',22978)
 ,('LEI','T',4283)
 ,('LIN','T',687)
 ,('LEI','E',431)
 ,('NOR','E',161)
 ,('NOT','E',842)
 ,('DER','S',1937)
 ,('XYZ','S',1937)

DECLARE @OwningAgency AS NVARCHAR(MAX),@Query  AS NVARCHAR(MAX);

SET @OwningAgency = STUFF((SELECT distinct ',' + QUOTENAME(OwningAgency) 
            FROM tblOwningAgency c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

SET @Query = 
'SELECT ReviewType, ' + @OwningAgency + ' from 
(
    SELECT *
    FROM tblOwningAgency
) x
pivot 
(
    SUM(Total)
    FOR OwningAgency in (' + @OwningAgency + ')
) p '

EXECUTE(@query)

@OwningAgency : It will give you your column list on which you wants to apply SUM @OwningAgency :它会给你你想要应用 SUM 的列列表

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM