假设我有这样的table
Col1 Col2 Col3 Col4
A X ADesc XDesc
A Y ADesc YDesc
B Y BDesc YDesc
C Z CDesc ZDesc
C W CDesc WDesc
假设Col1和Col2是代码,Col3和Col4是它们各自的描述。意思是Col3是Col1的描述。类似地,Col4是Col2的desc。我想找到所有不同的代码(单独的代码,而不是对)和他们的描述
结果应该是
A ADesc
B BDesc
C CDesc
X XDesc
Y YDesc
Z ZDesc
W WDesc
如何编写查询。我在想这样的事,但它不起作用
select Col1 as Code, Col2 as Desc from <tableA>
union
select Col3, Col4 from <tableA>;
也不知道如何区分。例如,有两个条目A,C,Y,但我只需要一个。
3条答案
按热度按时间ercv8c1e1#
试试下面这样的东西:
zpgglvta2#
在查询中,第一个SELECT中列出的代码列(Col1,Col2)和说明列(Col3,Col4)在UNION查询的第二个SELECT中列出,导致返回不同的结果。更改SELECT中的列将给予您想要的结果。
7ivaypg93#
使用
UNPIVOT
只查询表一次:其中,对于样本数据:
输出:
| 代码|描述|
| --|--|
| 一|ADesc|
| X| XDesc|
| Y| YDesc|
| B| BDesc|
| C| CDesc|
| Z| ZDesc|
| W| WDesc|
您还可以使用:用途:
它给出相同的输出;但是,它将查询表两次(每个
SELECT
查询一次),因此效率可能较低。下面的fiddle包含了两个查询的
EXPLAIN PLAN
s,显示UNPIVOT
使用了一个TABLE ACCESS FULL
,而使用UNION
有两个TABLE ACCESS FULL
。fiddle