您需要unpivot的數據,似乎所以你需要select distinct
你不想重複。在Oracle 11.1或更高版本中,可以使用UNPIVOT
運算符 - 優點是基表只會被讀取一次。
如果您需要,您可以添加order by
子句;我沒有,所以輸出中的行是任意的順序(如果你比較你的「所需的輸出」)。
with
test_data (Parent_ID, Parent_item, Child_Item) as (
select 1, 'A', 'B' from dual union all
select 1, 'A', 'C' from dual union all
select 2, 'H', 'I' from dual union all
select 2, 'H', 'J' from dual union all
select 2, 'H', 'K' from dual
)
-- End of test data (NOT part of the query).
-- SQL query begins BELOW THIS LINE.
select distinct parent_id, parent_or_child
from test_data
unpivot (parent_or_child
for col in (parent_item as 'parent_item', child_item as 'child_item'))
;
PARENT_ID PARENT_OR_CHILD
---------- ---------------
2 I
1 A
1 B
1 C
2 H
2 J
2 K
7 rows selected.
這工作正常,添加了一個命令完成它。謝謝! – SDR
@SDR - 「UNPIVOT」的結果有第三列,簡單地命名爲「col」(在查詢中定義在'unpivot'子句中)。我不'選擇它,但它仍然可用,例如,爲了訂購。如果你需要先訂購父母,然後再訂購孩子,那麼可以有一個更復雜的'order by'子句來達到這個目的。例如:'按parent_id排序,col desc,parent_or_child'。 – mathguy