如何在 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;
请注意,如果两列中存在相同的值,则此结果集将包含更多行。
我在一列上使用了不同的关键字,它确实工作得很好,但是当我在 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;
请注意,如果两列中存在相同的值,则此结果集将包含更多行。