[英]How to select distinct records from individual column in sql table
我想從此sql表的每一列中檢索不同的行
我的桌子
1 Apple
2 Banana
3 Apple
2 Apple
1 Orange
我想要這樣的結果:
1 Apple
2 Banana
3 Orange
請在這件事上給予我幫助
您可以通過執行以下操作來獲得不同的名稱:
select distinct name
from table t;
您可以通過執行以下操作添加第一列:
select row_number() over (order by name) as id, name
from (select distinct name
from table t
) t;
大多數數據庫都支持ANSI標准行號。 您尚未在數據庫中對此進行標記,因此這是最通用的解決方案。
編輯:
哦,您想要兩列各有一個值。 我認為這是full outer join
:
select nu.num, na.name
from (select num, row_number() over (order by num) as seqnum
from table
group by num
) nu full outer join
(select name, row_number() over (order by name) as seqnum
from table t
group by name
) na
on nu.seqnum = na.seqnum;
每個子查詢枚舉每列中的值。 full outer join
可確保即使一側或另一側缺少值,您也可以擁有值。
請嘗試一下
select *,row=rank() over(order by name) from (SELECT distinct name FROM abc) as cte
要么
with cte as
(
SELECT distinct name FROM abc
)
select *,row=rank() over(order by name) from cte
產量
| row | Name |
|-----------|----------|
| 1 | Apple |
| 2 | Banana |
| 3 | Orange |
概念證明。
在Oracle 11.2上測試
WITH
MyTable (firstName, lastName) AS (
SELECT '1', 'Apple' FROM DUAL UNION ALL
SELECT '2', 'Banana' FROM DUAL UNION ALL
SELECT '3', 'Apple' FROM DUAL UNION ALL
SELECT '2', 'Apple' FROM DUAL UNION ALL
SELECT '4', 'Apple' FROM DUAL UNION ALL
SELECT '1', 'Orange' FROM DUAL),
Ranked AS (
SELECT DISTINCT
firstName
, DENSE_RANK() OVER (ORDER BY firstName) AS fnRnk
, lastName
, DENSE_RANK() OVER (ORDER BY lastName) AS lnRnk
FROM MyTable
)
SELECT
DISTINCT R1.firstName, R2.lastName FROM Ranked R1 FULL OUTER JOIN Ranked R2 ON R1.fnRnk = R2.lnRnk ORDER BY lastName NULLS LAST, firstName
;
返回
| FIRSTNAME | LASTNAME |
|-----------|----------|
| 1 | Apple |
| 2 | Banana |
| 3 | Orange |
| 4 | (null) |
在原始數據中添加了一行,以演示不同長度的列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.