我正在嘗試對視窗函式內的值求和,但我不知道必須防止對重復項求和。下面是我現在得到的結果的片段。對于最后一列,我想計算唯一 STORE_ID 的 REG_MOVEMENT 總和,然后將其除以唯一商店的數量。此列應為 5603.5 ((9359 1848)/2),因為有 3 行具有相同的 STORE_ID 和不同的行。
| KEY_ID | PRODUCT_ID | STORE_ID | REG_MOVEMENT | (無列名) |
|---|---|---|---|---|
| 154 | 5214266 | 28002 | 9359 | 7481.25 |
| 155 | 5214266 | 28002 | 9359 | 7481.25 |
| 156 | 5214266 | 28002 | 9359 | 7481.25 |
| 173 | 5214266 | 28005 | 1848年 | 7481.25 |
我目前的代碼是
SELECT
KEY_ID,
PRODUCT_ID,
STORE_ID,
REG_MOVEMENT,
SUM(REG_MOVEMENT) OVER(PARTITION BY PRODUCT_ID) / CONUT(STORE_ID) OVER(PARTITION BY PRODUCT_ID)
uj5u.com熱心網友回復:
您需要分母中的不同計數,但 SQL Server 不允許在單個計數視窗函式呼叫中這樣做。作為一種解決方法,我們可以使用DENSE_RANK:
WITH cte AS (
SELECT *, DENSE_RANK() OVER (PARTITION BY PRODUCT_ID ORDER BY STORE_ID) dr
FROM yourTable
)
SELECT
KEY_ID,
PRODUCT_ID,
STORE_ID,
REG_MOVEMENT,
SUM(REG_MOVEMENT) OVER (PARTITION BY PRODUCT_ID) /
MAX(dr) OVER (PARTITION BY PRODUCT_ID) AS new_col
FROM cte
ORDER BY PRODUCT_ID, STORE_ID;
uj5u.com熱心網友回復:
使用子查詢對 (store_id, reg_movement) 行進行重復資料洗掉的一種方法:
select
KEY_ID, PRODUCT_ID, STORE_ID, REG_MOVEMENT,
(select avg(reg_movement)
from (select distinct store_id, reg_movement
from Tbl) Unq
) As NewCol
from Tbl
(Tbl 是你的桌子)
uj5u.com熱心網友回復:
SELECT AVG(reg_movement)
FROM (
SELECT DISTINCT store_id,
CAST(reg_movement AS FLOAT) AS reg_movement
FROM Table1
) a
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474591.html
上一篇:通過TSQL中的BEGINCATCH使用自定義訊息捕獲例外
下一篇:使用CTE按天和小時捕獲體積計數
