繁体   English   中英

如何使用数据透视将行转换为列?

[英]How to convert Row to Column using Pivot?

我正在尝试将行转换为列

这是我的表记录

记录

SrID    ProID   Year    Qty   Months
-------------------------------------
4444    112112  2019    22    THREE
4444    112112  2019    44    FOUR
4444    112112  2019    20    FIVE
2244    112112  2019    17    SIX
5555    112112  2019    16    SEVEN

4444    222111  2019    5     ONE
4444    222111  2019    4     FOUR
4444    222111  2019    55    FIVE
2244    222111  2019    20    SIX

预期结果

SrID    ProID   One   Two    Three    Four    Five   Six   Seven
----------------------------------------------------------------
4444    112112  null  null   22       44      20     null  null 
2244    112112  null  null   null     null    null   17    null
5555    112112  null  null   null     null    null   null  16   

4444    222111  5     null   null     4       55     null  null 
2244    222111  null  null   null     null    null   20    null

我尝试如下

SELECT
    SrID,ProID,ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN
FROM
    Records rec
PIVOT
(
    MAX(rec.Qty)
    FOR Months IN (ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN)
)AS P

但是我以错误的方式得到了结果,例如

SrID    ProID   One   Two    Three    Four    Five   Six   Seven
----------------------------------------------------------------
4444    112112  null  null   22       null    null   null  null 
4444    112112  null  null   null     44      null   null  null 
4444    112112  null  null   null     null    20     null  null 

可以给我解决方案。

一切对我来说看起来都很不错:

CREATE TABLE [dbo].[myTable](
    SrID[numeric](10),    
    ProID[numeric](10),   
    Year[numeric](10),    
    Qty[numeric](10),   
    Months[varchar](20) NULL)

INSERT INTO [myTable] VALUES 
(4444,   112112, 2019 ,   22    ,'THREE'),
(4444,   112112, 2019 ,   44    ,'FOUR'),
(4444,   112112, 2019 ,   20    ,'FIVE'),
(2244,   112112, 2019 ,   17    ,'SIX'),
(5555,   112112, 2019 ,   16    ,'SEVEN'),
(4444,   222111, 2019 ,   5     ,'ONE'),
(4444,   222111, 2019 ,   4     ,'FOUR'),
(4444,   222111, 2019 ,   55    ,'FIVE'),
(2244,   222111, 2019 ,   20    ,'SIX')

--select * from [myTable]

SELECT
    SrID,ProID,ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN
    FROM [dbo].[myTable] rec
    PIVOT
    (
        MAX(rec.Qty)
        FOR Months IN (ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN)
    )AS P
order by 2,1

/*
Result:
SrID    ProID   ONE TWO THREE   FOUR    FIVE    SIX SEVEN
2244    112112  NULL    NULL    NULL    NULL    NULL    17  NULL
4444    112112  NULL    NULL    22  44  20  NULL    NULL
5555    112112  NULL    NULL    NULL    NULL    NULL    NULL    16
2244    222111  NULL    NULL    NULL    NULL    NULL    20  NULL
4444    222111  5   NULL    NULL    4   55  NULL    NULL
*/

您能看到表格/数据/查询有什么不同吗?

暂无
暂无

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

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