【问题标题】:How to convert Row to Column using Pivot?如何使用 Pivot 将行转换为列?
【发布时间】:2019-08-31 15:53:52
【问题描述】:

我正在尝试将行转换为列

这是我的表格记录

记录

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 

可以给我解决它的工作原理。

【问题讨论】:

  • FROM 子句中有JOINs 吗?
  • @MJoy 没有加入。这是直接临时表
  • 好吧,您的代码似乎正确,可能是空格问题 - 试试,SELECT LTRIM(RTRIM(SrID)) SrID ,LTRIM(RTRIM(ProID)) ProID .....
  • @MJoy 还是一样的兄弟
  • 请在问题中包含表记录的 DDL 和 DML

标签: sql sql-server pivot


【解决方案1】:

我觉得一切都很好:

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
*/

你能看出你的表/数据/查询有什么不同吗?

【讨论】:

  • 我现在不知道。是的,它和你的一样
  • 如果您共享表格/数据,我可以检查它们。
  • 我找到了兄弟。抱歉,Records 表中还有其他列。谢谢兄弟
  • 太棒了!万事如意
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多