use*_*418 5 join sql-server group-by
我有两个表:
表格1
ID totalamount
--- -----------
100 1000
101 500
Run Code Online (Sandbox Code Playgroud)
表 2
ID Individualamount
--- ----------------
100 500
100 300
100 100
101 200
101 300
Run Code Online (Sandbox Code Playgroud)
我需要一个结果显示
ID TotalAmount sum(Individualamount) difference (TA-IA) % of diff
--- ----------- --------------------- ------------------ ---------
100 1000 900 100 10
101 500 500 0 0
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以通过将 放在GROUP BY子查询中来做到这一点。这是一个解决方案:
CREATE TABLE #1 (ID int, TotalAmount decimal(20,2));
CREATE TABLE #2 (ID int, Individualamount decimal(20,2));
INSERT #1 VALUES (100, 1000), (101, 500);
INSERT #2 VALUES (100, 500), (100, 300), (100, 100), (101, 200), (101, 300);
SELECT a.ID
, a.TotalAmount
, c.[Sum(IndividualAmount)]
, d.[Diffence(TA-IA)]
, e.[%of diff]
FROM #1 a
LEFT JOIN
(
SELECT b.ID, [Sum(IndividualAmount)] = SUM(b.IndividualAmount)
FROM #2 b
GROUP BY b.ID
) c
ON c.ID = a.ID
CROSS APPLY
(
SELECT [Diffence(TA-IA)] = a.TotalAmount - c.[Sum(IndividualAmount)]
) d
CROSS APPLY
(
SELECT [%of diff] = 100.0 * [Diffence(TA-IA)] / NULLIF(a.TotalAmount, 0)
) e;
Run Code Online (Sandbox Code Playgroud)
结果:
ID TotalAmount Sum(IndividualAmount) Diffence(TA-IA) %of diff
100 1000.00 900.00 100.00 10.000000
101 500.00 500.00 0.00 0.000000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16416 次 |
| 最近记录: |