【问题标题】:Rows in pivot table not merging数据透视表中的行未合并
【发布时间】:2020-05-23 15:53:58
【问题描述】:

我创建了下表来说明正在发生的事情

create table weather (
    WDate varchar(10),
    ItemCode varchar(8),
    ItemValue int,
    ItemUnits varchar(8))

insert into Weather values 
    ('2020-02-10', 'MAXTEMP', 6, 'degC'),
    ('2020-02-10', 'MINTEMP', 2, 'degC'),
    ('2020-02-10', 'RAIN', 0, 'mm'),

    ('2020-02-11', 'MAXTEMP', 5, 'degC'),
    ('2020-02-11', 'RAIN', 20, 'mm'),
    ('2020-02-11', 'MINTEMP', 1, 'degC'),

    ('2020-02-12', 'RAIN', 5, 'mm'),
    ('2020-02-12', 'MAXTEMP', 8, 'degC'),
    ('2020-02-12', 'MINTEMP', 2, 'degC')

数据的顺序并不总是相同,因为它可能来自可能未进行时间同步的设备。当我运行以下查询时

SELECT
    [wdate] as 'Date',
    [MINTEMP] as 'Min Temp',
    [MAXTEMP] as 'Max Temp',
    [RAIN] as 'Rain'
FROM
(
    SELECT
        *
    FROM
        weather
) rawdata
PIVOT
(
    min(ItemValue)
    FOR ItemCode IN ([MINTEMP], [MAXTEMP], [RAIN])
) pitem
ORDER BY WDate

我明白了

WDate       Min Temp  Max Temp  Rain
2020-02-10  2         6         NULL
2020-02-10  NULL      NULL      0
2020-02-11  1         5         NULL
2020-02-11  NULL      NULL      20
2020-02-12  2         8         NULL
2020-02-12  NULL      NULL      5

我无法弄清楚为什么 Rain 数据没有与 Min 和 Max Temp 位于同一行。我期待

WDate       Min Temp  Max Temp  Rain
2020-02-10  2         6         0
2020-02-11  1         5         20
2020-02-12  2         8         5

【问题讨论】:

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


    【解决方案1】:

    您必须“馈送”具有最少列数的枢轴。请注意,子选择 rawdata 中缺少 ItemUnits

    示例

    SELECT
        [wdate] as 'Date',
        [MINTEMP] as 'Min Temp',
        [MAXTEMP] as 'Max Temp',
        [RAIN] as 'Rain'
    FROM
    (
        Select WDate
              ,ItemCode
              ,ItemValue 
          from Weather
    ) rawdata
    PIVOT
    (
        min(ItemValue)
        FOR ItemCode IN ([MINTEMP], [MAXTEMP], [RAIN])
    ) pitem
    ORDER BY WDate
    

    退货

    Date        Min Temp    Max Temp    Rain
    2020-02-10  2           6           0
    2020-02-11  1           5           20
    2020-02-12  2           8           5
    

    【讨论】:

    • 我打算提出一个关于 ItemUnits 的单独问题。所以基本上我应该指定我正在使用的列,并省略我不使用的列。
    • @cup BINGO!!你明白了:)
    猜你喜欢
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多