数据透视 table 中的行未合并

Rows in pivot table not merging

我创建了以下内容table 来说明正在发生的事情

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

我不明白为什么雨数据最终没有与最低和最高温度在同一行。我在期待

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

您必须 "FEED" 具有最少列数的主元。请注意子select 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

Returns

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