繁体   English   中英

Oracle SQL合并具有相同ID的行并组合列结果

[英]Oracle SQL merging rows with same id and combining column results

我有一个这样的查询:

select
a.date,
a.id,
b.name,
a.data1,
a.data2,
a.data3
from table a,
inner join table b on a.id=b.id.

它返回给我类似这样的数据:

一个约会 援助 B.NAME A.DATA1 A.DATA2 A.DATA3
06.08.22 12345 名称1 10 5 5
06.08.22 12345 名称1 15 3 2
06.08.22 34567 名称2 6 1 5
06.08.22 45678 名称3 2 2 4

如果有重复 ID 的行,我需要结果如下所示:

一个约会 援助 B.NAME A.DATA1 A.DATA2 A.DATA3
06.08.22 12345 名称1 25 8 7
06.08.22 34567 名称2 6 1 5
06.08.22 45678 名称3 2 2 4

与获取具有相同 ID 的行一样,仅显示 1 行并将 DATA 结果汇总到它们自己的列中

我试过使用 listagg 但它似乎不起作用。

select
a.date,
listagg(a.ID, ',') within group (order by null),
b.name,
sum(a.data1),
sum(a.data2),
sum(a.data3)
from table a,
inner join table b on a.id=b.id.

我得到这样的结果:

一个约会 援助 B.NAME A.DATA1 A.DATA2 A.DATA3
06.08.22 12345,12345 名称1 10 5 5
06.08.22 12345,12345 名称1 15 3 2
06.08.22 34567 名称2 6 1 5
06.08.22 45678 名称3 2 2 4

我是在使用 listagg 错误还是缺少其他东西?

谢谢!

不需要自连接,除了 id 之外的每个列都可以使用聚合函数:

  • 对于 data1,data2,data3 列,出于明显的原因使用SUM

  • 对于 dt 列(date 是 oracle 中的保留字,不应用作列名),使用MINMAX (取决于您的要求)。 如果您不使用聚合函数,则需要将此列包含在GROUP BY子句中,并且如果同一 id 存在不同的日期,它可能会显示多行。

  • 对于名称列,使用MINMAX (取决于您的要求)。 如果您不使用聚合函数,则需要将此列包含在GROUP BY子句中,并且如果同一 id 存在不同的名称,它可能会显示多行。

-- create test data
CREATE TABLE tablea (dt,  id, name, data1,data2,data3) AS
(
SELECT TO_DATE('06.08.22','DD.MM.YY'),  12345,  'Name1' ,10,    5,  5 FROM DUAL UNION ALL
SELECT TO_DATE('06.08.22','DD.MM.YY'),  12345,  'name1' ,15,    3,  2 FROM DUAL UNION ALL
SELECT TO_DATE('06.08.22','DD.MM.YY'),  34567,  'name2' ,6, 1,  5 FROM DUAL UNION ALL
SELECT TO_DATE('06.08.22','DD.MM.YY'),  45678,  'name3' ,2, 2,  4 FROM DUAL
);


SELECT
  MIN(dt)    AS min_dt,
  id,
  MIN(name)  AS min_name,
  SUM(data1) AS data1,
  SUM(data2) AS data2,
  SUM(data3) AS data3
  FROM
  tablea
 GROUP BY
  id;

MIN_DT              ID MIN_N      DATA1      DATA2      DATA3
----------- ---------- ----- ---------- ---------- ----------
06-AUG-2022      45678 name3          2          2          4
06-AUG-2022      12345 Name1         25          8          7
06-AUG-2022      34567 name2          6          1          5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM