我有一個有趣的查詢,我試圖弄清楚。我有一個視圖正在添加一列。此列是來自其他表的數據,將數據轉換爲單行。現在,我需要清除這個旋轉數據中的重複條目。 Listagg非常適合將數據獲取到單行,但我需要使其獨一無二。雖然我知道如何讓它變得獨一無二,但我忽略了相關子查詢只能達到1級的事實。所以......不太確定如何獲得明確的價值列表。如果我不這樣做,我可以讓它工作。任何人都可以工作一些SQL魔術?oracle相關子查詢使用不同的listagg
的樣本數據:
drop table test;
drop table test_widget;
create table test (id number, description Varchar2(20));
create table test_widget (widget_id number, test_fk number, widget_type varchar2(20));
insert into test values(1, 'cog');
insert into test values(2, 'wheel');
insert into test values(3, 'spring');
insert into test_widget values(1, 1, 'A');
insert into test_widget values(2, 1, 'A');
insert into test_widget values(3, 1, 'B');
insert into test_widget values(4, 1, 'A');
insert into test_widget values(5, 2, 'C');
insert into test_widget values(6, 2, 'C');
insert into test_widget values(7, 2, 'B');
insert into test_widget values(8, 3, 'A');
insert into test_widget values(9, 3, 'C');
insert into test_widget values(10, 3, 'B');
insert into test_widget values(11, 3, 'B');
insert into test_widget values(12, 3, 'A');
commit;
這裏是工作的查詢的例子,但說明重複數據:
SELECT A.ID
, A.DESCRIPTION
, (SELECT LISTAGG (WIDGET_TYPE, ', ') WITHIN GROUP (ORDER BY WIDGET_TYPE)
FROM TEST_WIDGET
WHERE TEST_FK = A.ID) widget_types
FROM TEST A
這裏是什麼並沒有因深度合作的例子我嘗試引用ID:
SELECT A.ID
, A.DESCRIPTION
, (SELECT LISTAGG (WIDGET_TYPE, ', ') WITHIN GROUP (ORDER BY WIDGET_TYPE)
FROM (SELECT DISTINCT WIDGET_TYPE
FROM TEST_WIDGET
WHERE TEST_FK = A.ID))
WIDGET_TYPES
FROM TEST A
這裏是我想顯示的內容:
1 cog A, B
2 wheel B, C
3 spring A, B, C
如果有人知道他們的頭頂,那太棒了!否則,我可以發佈一些示例創建語句來幫助您使用虛擬數據來確定查詢。
*「我可以發佈一些示例創建語句來幫助您使用虛擬數據來計算查詢。」 - 是的,您應該這樣做。 :) – GolezTrol
好吧,你有我;)我添加了示例數據。 – dvsoukup