[英]Updating a column GROUP BY SUM
我有兩張桌子
CREATE TABLE TableB (Grp_ID int, PAmt int, Split float)
CREATE TABLE TableC (Grp_ID int,Code_ID int)
我想計算拆分的百分比,以便如果我在表C中具有一個code_ID值,該值鏈接到tableB中的兩個grp_ids,則應該拆分。 (PAmt / SUM(PAmt))換句話說,
Case1
INSERT INTO TableB (Grp_ID, PAmt)
VALUES (1234,2280) , (1235,3420);
INSERT INTO TableC (Grp_ID,Code_ID)
VALUES (1234,102) , (1235,102)
Expected Result:
TableB
grp_ID PAmt Split
1234 2280 0.4 (2280 / (2280+3420))
1235 3420 0.6 (3420 / (2280+3420))
Case2
INSERT INTO TableB (Grp_ID, PAmt)
VALUES (5174,1400) , (5175,2400);
INSERT INTO TableC (Grp_ID,Code_ID)
VALUES (5174,009) , (5175,010)
Expected Result:
TableB
grp_ID PAmt Split
5174 1400 1 (because there is only one code for 5174) (1400/1400)
5175 2400 1 (because there is only one code for 5175) (2400/2400)
Case3
INSERT INTO TableB (Grp_ID, PAmt)
VALUES (1111,480) , (1112,480) ,(1113,480) , (1114,960) ;
INSERT INTO TableC (Grp_ID,Code_ID)
VALUES (1111,777) , (1112,777) , (1113,778),(1114,778)
Expected Result:
TableB
grp_ID PAmt Split
1111 480 0.50 ( 480 / (480+480))
1112 480 0.50 ( 480 / (480+480))
1113 480 0.33 ( 480 / (480+960))
1114 960 0.67 ( 960 / (480+960))
使用標准的SQL99:
SELECT
TableB.Grp_ID, TableB.PAmt,
1.0 * TableB.PAmt / x.Sum_PAmt AS Split
FROM TableB
INNER JOIN TableC ON TableC.Grp_ID = TableB.Grp_ID
INNER JOIN (
SELECT TableC.Code_ID, SUM(TableB.PAmt) AS Sum_PAmt
FROM TableB
INNER JOIN TableC ON TableC.Grp_ID = TableB.Grp_ID
GROUP BY TableC.Code_ID
) AS x ON x.Code_ID = TableC.Code_ID
使用某些數據庫支持的SQL2003的窗口函數:
SELECT
TableB.Grp_ID, TableB.PAmt,
1.0 * TableB.PAmt / SUM(TableB.PAmt) OVER (PARTITION BY TableC.Code_ID) AS Split
FROM TableB
INNER JOIN TableC ON TableC.Grp_ID = TableB.Grp_ID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.