我有一個這樣的查詢:
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 錯誤還是缺少其他東西?
謝謝!
uj5u.com熱心網友回復:
不需要自連接,除了 id 之外的每個列都可以使用聚合函式:
對于 data1,data2,data3 列,
SUM出于明顯的原因使用對于 dt 列(date 是 oracle 中的保留字,不應用作列名),使用
MINorMAX(取決于您的要求)。如果您不使用聚合函式,則需要在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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488359.html
