DB2 -多行到多列的一行

yqkkidmi  于 2023-11-18  发布在  DB2
关注(0)|答案(1)|浏览(173)

我知道我以前做过这个,但我现在不能弄清楚这一点。我在查询中得到多行,但我希望每个ID 2一行。
尝试了很多变体并在谷歌上搜索。找到了一些有希望的行号示例,但无法使其工作。
表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


我有一个列表中的所有ID 2: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

pieyvz9o

pieyvz9o1#

您可以使用窗口函数ROW_NUMBER()为id2定义的分区中的每一行分配一个唯一的连续整数,然后应用条件聚合:

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;

字符串
Demo here

相关问题