我試圖在具有多個磁區級別的視窗函式中獲得不同的行數。以下是我的資料示例。
| PRODUCT_ID | KEY_ID | 商店集群 |
|---|---|---|
| 1000078 | 120 | 紐約市 |
| 1000078 | 202 | LLF |
| 1000078 | 202 | 紐約市 |
| 1000078 | 202 | 紐約市 |
我想查看每個獨特的,PRODUCT_ID然后確定每個獨特的有KEY_ID多少。例如1000078 有兩個 unique (120 和 202),其中 120 有 1 個 unique , 202 有 2 個 unqiue 。我嘗試使用 a ,但似乎無法正確磁區。我想得到一個看起來像這樣的表:STORECLUSTERSKEY_IDPRODUCT_IDKEY_IDSTORECLUSTERSTORECLUSTERRANK()DENSE_RANK()
| PRODUCT_ID | KEY_ID | 商店集群 | STORECLUSTER_COUNT 個 |
|---|---|---|---|
| 1000078 | 120 | 紐約市 | 1 |
| 1000078 | 202 | LLF | 2 |
| 1000078 | 202 | 紐約市 | 2 |
| 1000078 | 202 | 紐約市 | 2 |
uj5u.com熱心網友回復:
不幸的是,SQL Server 不支持COUNT(DISTINCT作為視窗函式。
所以你需要嵌套視窗函式。我發現最簡單和最有效的方法是MAXover a DENSE_RANK,但還有其他方法。
磁區子句相當于GROUP BY普通聚合中的,然后您正在輸入的值DISTINCT進入. 所以你計算一個排名,同時忽略并列的結果,然后取每個磁區的最大排名。ORDER BYDENSE_RANK
SELECT
PRODUCT_ID,
KEY_ID,
STORECLUSTER,
STORECLUSTER_COUNT = MAX(rn) OVER (PARTITION BY PRODUCT_ID, KEY_ID)
FROM (
SELECT *,
rn = DENSE_RANK() OVER (PARTITION BY PRODUCT_ID, KEY_ID ORDER BY STORECLUSTER)
FROM YourTable t
) t;
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474585.html
上一篇:在另一個表中保留一個表的記錄計數
下一篇:Sql確定沒有價值的行
