我有两个数据集
FEES PAYMENTS
CrsCode InstNo FEE Regno CRSCODE Instno Payment
CA1 -2 100 R1 CA1 -2 100
CA1 -1 200 R1 CA1 -1 200
CA1 1 200 R1 CA1 1 200
CA1 2 300
DESIRED OUTPUT
REGNO CRSCODE INSTNO FEE PAID DIFF
R1 CA1 -2 100 100 0
R1 CA1 -1 200 200 0
R1 CA1 1 200 200 0
R1 CA1 2 300 0 300
OUTPUT I AM GETTING
REGNO CRSCODE INSTNO FEE PAID DIFF
R1 CA1 -2 100 100 0
R1 CA1 -1 200 200 0
R1 CA1 1 200 200 0
null null null 300 null null
Run Code Online (Sandbox Code Playgroud)
我正在使用的查询
select a.Regno,a.crscode,b.fee,a.payment,b.fee-a.payment from Fees as b Left join
Payments as a on a.CrsCode=b.CrsCode and a.InstNo=b.InstNo
Run Code Online (Sandbox Code Playgroud)
请找到SQLFiddle
;WITH regCrs AS
(
SELECT regno, crsCode FROM dbo.PAYMENTS
GROUP BY regno, crsCode
),
f AS
(
SELECT f.crsCode, f.instNo, f.fee, regCrs.regno
FROM regCrs INNER JOIN dbo.FEES AS f
ON regCrs.crsCode = f.crsCode
)
SELECT f.regno, f.crsCode, f.instNo, f.fee,
paid = COALESCE(p.payment, 0),
DIFF = f.fee - COALESCE(p.payment, 0)
FROM f
LEFT OUTER JOIN dbo.PAYMENTS AS p
ON f.crsCode = p.crsCode
AND f.instNo = p.instNo;
Run Code Online (Sandbox Code Playgroud)
结果:
REGNO CRSCODE INSTNO FEE PAID DIFF
===== ======= ====== === ==== ====
r1 CA1 -2 100 100 0
r1 CA1 -1 200 200 0
r1 CA1 1 200 200 0
r1 CA1 2 300 0 300
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |