[英]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 中的保留字,不应用作列名),使用MIN
或MAX
(取决于您的要求)。 如果您不使用聚合函数,则需要将此列包含在GROUP BY
子句中,并且如果同一 id 存在不同的日期,它可能会显示多行。
对于名称列,使用MIN
或MAX
(取决于您的要求)。 如果您不使用聚合函数,则需要将此列包含在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.