DB2 - 多行到 1 行多列

问题描述 投票:0回答:1

我知道我以前做过这个,但现在我无法弄清楚。 我在查询中得到多行,但我想要每个 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
db2
1个回答
0
投票

您可以使用窗口函数

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
© www.soinside.com 2019 - 2024. All rights reserved.