我知道我以前做过这个,但现在我无法弄清楚。 我在查询中得到多行,但我想要每个 Id2 一行。
尝试了很多变体并用谷歌搜索。 找到了一些有希望的行号示例,但无法使其工作。
表1:
Id1 Id2
1234500 T100100
1234501 T100100
1423400 T761232
1456100 T441122
1456101 T441122
表2:
Id1 Value
1234500 1015
1234501 1080
1423400 1080
1456100 1044
1456101 1077
我的列表中有所有 Id2:s。
SELECT Id2, Value
FROM Table1 a
JOIN Table2 b
ON a.Id1 = b.id1
WHERE a.Id2 in ('T100100','T761232','T441122')
给予
Id2 Value
T100100 1015
T100100 1080
T761232 1080
T441122 1044
T441122 1077
我不想要这个结果:
Id2 Value1 Value2
T100100 1015 1080
T761232 1080 null or space or 0
T441122 1044 1077
您可以使用窗口函数
ROW_NUMBER()
为分区内的每一行分配行号,然后应用条件聚合 :
SELECT Id2, MAX(CASE WHEN rn = 1 then Value END) as Value1,
MAX(CASE WHEN rn > 1 then Value END) as Value2
FROM (
SELECT Id2, Value, ROW_NUMBER() OVER (PARTITION BY id2 ORDER BY Value) AS rn
FROM Table1 a
JOIN Table2 b ON a.Id1 = b.id1
WHERE a.Id2 in ('T100100','T761232','T441122')
) as s
GROUP BY Id2