[英]distinct values of different columns
我不確定是否有可能。
我有一個包含3列的表格,並且我想獲得每個表格的不同值,有一個示例:
A B C
--------------------
a1 b1 c1
a1 b2 c2
a1 b3 c1
預期結果是:
A B C
-----------------
a1 b1 c1
b2 c2
b3
因此,它將是以下內容的並集:
SELECT DISTINCT A FROM myTable
SELECT DISTINCT B FROM myTable
SELECT DISTINCT C FROM myTable
使用UNION,我在一列中得到結果。
這可行嗎?
請嘗試以下...
SELECT COALESCE( a, '' ) AS a,
COALESCE( b, '' ) AS b,
COALESCE( c, '' ) AS c
FROM ( SELECT a,
ROW_NUMBER() OVER ( ORDER BY a ) AS recordNumber
FROM ( SELECT a
FROM myTable
GROUP BY a
) aFinder
) aNumberedFinder
FULL JOIN ( SELECT b,
ROW_NUMBER() OVER ( ORDER BY b ) AS recordNumber
FROM ( SELECT b
FROM myTable
GROUP BY b
) bFinder
) bNumberedFinder ON bNumberedFinder.recordNumber = aNumberedFinder.recordNumber
FULL JOIN ( SELECT c,
ROW_NUMBER() OVER ( ORDER BY c ) AS recordNumber
FROM ( SELECT c
FROM myTable
GROUP BY c
) cFinder
) cNumberedFinder ON cNumberedFinder.recordNumber = aNumberedFinder.recordNumber
OR cNumberedFinder.recordNumber = bNumberedFinder.recordNumber;
該語句以以下子查詢開頭...
SELECT a
FROM myTable
GROUP BY a
此子查詢在字段a
生成唯一值的列表。 以下子查詢使用記錄(又稱行)編號重現此列表...
SELECT a,
ROW_NUMBER() OVER ( ORDER BY a ) AS recordNumber
FROM ( SELECT a
FROM myTable
GROUP BY a
) aFinder
類似的子查詢用於在字段b
和c
生成唯一值的編號列表。
然后在a
和b
的列表之間執行FULL OUTER JOIN
(在此縮寫為FULL JOIN
),並將它們的記錄號用作公用/ FULL JOIN
值。
注意: INNER JOIN
只返回與兩個較短列表中的記錄一樣多的記錄。 僅當JOIN
左側的列表的長度大於或大於右側列表的長度時, LEFT JOIN
才有效。 類似的邏輯適用於RIGHT JOIN
的用法。 FULL JOIN
將以LEFT JOIN
或RIGHT JOIN
的方式FULL JOIN
兩個列表,而不管哪個列表更長。
然后,在上述連接的數據集和c
的列表之間執行FULL JOIN
,在其中的任意一個列表中找到一個公共值。
然后從最終聯接的數據集中選擇a
, b
和c
的值,其中COALESCE()
函數用空字符串( ''
)替換任何NULL
值(例如由聯接過程生成的值)的出現
如果您有任何問題或意見,請隨時發表評論。
附錄
我的語句已針對使用以下腳本創建的數據庫進行了測試...
CREATE TABLE myTable
(
a VARCHAR( 5 ),
b VARCHAR( 5 ),
c VARCHAR( 5 )
);
INSERT INTO myTable ( a,
b,
c
)
VALUES ( 'a1', 'b1', 'c1' ),
( 'a1', 'b2', 'c2' ),
( 'a1', 'b3', 'c1' );
進一步閱讀
https://docs.microsoft.com/zh-cn/sql/t-sql/language-elements/coalesce-transact-sql (在Transact-SQL中使用COALESCE()
函數)
https://www.w3schools.com/sql/sql_join.asp (關於各種類型的水平JOIN
維恩圖很有用)
https://technet.microsoft.com/zh-cn/library/ms187518(v = OUTER JOIN
在SQL Server中使用OUTER JOIN
)
https://docs.microsoft.com/zh-cn/sql/t-sql/functions/row-number-transact-sql (在Transact-SQL中使用ROW_NUMBER()
時)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.