Sql-Server
SQL 在分區上計數不同
我有一個包含兩列的表,我想計算 Col_B 上的不同值(以 Col_A 為條件)。
我的表
Col_A | Col_B A | 1 A | 1 A | 2 A | 2 A | 2 A | 3 b | 4 b | 4 b | 5
預期結果
Col_A | Col_B | Result A | 1 | 3 A | 1 | 3 A | 2 | 3 A | 2 | 3 A | 2 | 3 A | 3 | 3 b | 4 | 2 b | 4 | 2 b | 5 | 2
我嘗試了以下程式碼
select *, count (distinct col_B) over (partition by col_A) as 'Result' from MyTable
計數(不同的 col_B)不起作用。如何重寫 count 函式來計算不同的值?
這就是我的做法:
SELECT * FROM #MyTable AS mt CROSS APPLY ( SELECT COUNT(DISTINCT mt2.Col_B) AS dc FROM #MyTable AS mt2 WHERE mt2.Col_A = mt.Col_A -- GROUP BY mt2.Col_A ) AS ca;
鑑於問題中提供的數據,該
GROUP BY
子句是多餘的,但可能會為您提供更好的執行計劃。見後續問答CROSS APPLY 產生外連接。如果您希望將該功能添加到 SQL Server,請考慮投票支持回饋站點上的聚合函式的 OVER 子句增強請求 - DISTINCT 子句。