如何在 oracle sql 中的两列上使用不同的关键字?

How to use distinct keyword on two columns in oracle sql?

我在一列上使用了不同的关键字,它确实工作得很好,但是当我在 select 查询中添加第二列时,它对我不起作用,因为两列都有重复的值。所以我不想在两列中显示重复值。是否有任何适当的 select 查询。

样本数据为:
对于 Col001:

555
555
7878
7878
89.

Col002:

43
43
56
56
56
67
67
67
79
79
79.

我想要这些格式的数据: Col001:

555
7878
89.

Col002:

43
56
67
79

我尝试了以下查询:

Select distinct col001, col002 from tbl1

DISTINCT 在考虑行中所有值的情况下处理整行,并将删除整行重复的重复值。

例如,给定示例数据:

CREATE TABLE table_name (col001, col002) AS
SELECT 1, 1 FROM DUAL UNION ALL
SELECT 1, 2 FROM DUAL UNION ALL
SELECT 1, 3 FROM DUAL UNION ALL
SELECT 2, 1 FROM DUAL UNION ALL
SELECT 2, 2 FROM DUAL UNION ALL
--
SELECT 1, 2 FROM DUAL UNION ALL -- These are duplicates
SELECT 2, 2 FROM DUAL;

然后:

SELECT DISTINCT
       col001,
       col002
FROM   table_name

输出:

COL001 COL002
1 1
1 2
1 3
2 1
2 2

并且已删除重复项。


如果您只想为每一列显示不同的值,那么您需要分别考虑每一列,并且可以使用类似的东西:

SELECT c1.col001,
       c2.col002
FROM   ( SELECT DISTINCT
                col001,
                DENSE_RANK() OVER (ORDER BY col001) AS rnk
         FROM table_name
       ) c1
       FULL OUTER JOIN
       ( SELECT DISTINCT
                col002,
                DENSE_RANK() OVER (ORDER BY col002) AS rnk
         FROM table_name
       ) c2
       ON (c1.rnk = c2.rnk)

输出:

COL001 COL002
1 1
2 2
null 3

db<>fiddle here

使用集合运算符。 UNION 将为您提供来自两个子查询的一组唯一值。

select col001 as unq_col_val 
from your_table
union
select col002 
from your_table;

这假设您不关心该值是来自 COL001 还是 COL002。如果您不放心,此变体会保留该信息:

select  'COL001' as source_col
       ,col001 as unq_col_val 
from your_table
union
select 'COL002' as source_col
       ,col002 
from your_table;

请注意,如果两列中存在相同的值,则此结果集将包含更多行。