簡體   English   中英

T-SQL 計算多列中不同值的數量

[英]T-SQL count number of different values across multiple columns

我有一個 SQL 數據庫,其中包含一個包含四個不同貨幣列的表,例如,我需要確定每條記錄在這四個列中有多少種不同的貨幣。

記錄編號 Curr1 Curr2 Curr3 Curr4 貨幣計數
1 英鎊 美元 英鎊 英鎊 2
2 英鎊 歐元 英鎊 美元 3
3 英鎊 英鎊 英鎊 英鎊 1
4 英鎊 英鎊 英鎊 歐元 2

我如何確定每條記錄的“CurrencyCount”/貨幣計數? 我想不出如何解決這個問題

感謝您的任何幫助

您可以使用表值構造函數引用外行中的列,然后使用COUNT (DISTINCT - 不需要任何擴展和折疊GROUP BY

SELECT *,
       CurrrencyCount = (SELECT COUNT (DISTINCT Currency) FROM   (VALUES (CURR1), (CURR2), (CURR3), (CURR4)) AS x (Currency))
FROM   YourTable

這將完成工作。 但不確定如果有大量數據,性能會如何。

WITH CTE as (
SELECT '1' as RecID,'GBP' as CURR1,'USD' as CURR2,'GBP' as CURR3, 'GBP' as CURR4
UNION ALL
SELECT '2'  ,'GBP'  ,'EUR'  ,'GBP','USD'
UNION ALL
SELECT '3'  ,'GBP'  ,'GBP'  ,'GBP','GBP'
UNION ALL
SELECT '4'  ,'GBP'  ,'GBP'  ,'GBP','EUR'
)

SELECT 
RecID
,CURR1,CURR2,CURR3,CURR4
,COUNT(DISTINCT Currency) as CurrrencyCount
FROM CTE
CROSS APPLY (VALUES (CURR1), (CURR2), (CURR3), (CURR4)) as x (Currency)
GROUP BY RecID,CURR1,CURR2,CURR3,CURR4

只運行這個它也可以工作

SELECT 
RecordID
,Curr1,Curr2,Curr3,Curr4
,COUNT(DISTINCT Currency) as Currency
FROM  [TABLE_NAME]
CROSS APPLY (VALUES (Curr1), (Curr2), (Curr3),(Curr4)) as x (Currency)
GROUP BY RecordID,Curr1,Curr2,Curr3,Curr4

暫無
暫無

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

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