簡體   English   中英

如何從SQL表的各個列中選擇不同的記錄

[英]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) |

在原始數據中添加了一行,以演示不同長度的列。

SQL小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM