通过平衡获得复杂的结果
Getting Complex Result With Balance
我有两个 tables Issue
和 Received
。我想得到同一行问题的结果。
问题table:
NO
LCODE
PCS
1
L0001
10
2
L0002
25
3
L0003
75
4
L0004
12
5
L0005
15
收到table:
NO
LCODE
PCS
1
L0001
5
2
L0001
5
3
L0003
48
4
L0003
12
5
L0003
15
想要的结果:
NO
LCODE
ISSPCS
RECPCS
BAL
1
L0001
10
5
5
2
L0001
0
5
0
3
L0003
75
48
27
4
L0003
0
12
15
5
L0003
0
15
0
6
L0004
12
0
12
7
L0005
15
0
15
SELECT ROW_NUMBER() OVER(PARTITION BY i.LCODE ORDER BY i.LCODE) as NO,
i.LCODE,i.PCS as ISSPCS,r.PCS as RECPCS,(i.PCS-r.PCS) as BAL
FROM Issue i
LEFT JOIN Received r ON i.LCODE = r.LCODE
找到获得此结果的最佳方法谢谢。
试试这个代码:
SELECT ROW_NUMBER() OVER ( ORDER BY i.LCODE ASC, RunninngSum ASC) AS [NO]
, i.LCODE
, CASE WHEN RunninngSum > r.PCS THEN 0 ELSE i.PCS
END AS ISSPCS
, ISNULL( r.PCS, 0) AS RECPCS
, i.PCS - ISNULL( RunninngSum, 0) as BAL
FROM Issue i
LEFT JOIN Received r ON i.LCODE = r.LCODE
CROSS APPLY (
SELECT SUM( r1.PCS) AS RunninngSum
FROM Received r1
WHERE r1.LCODE = r.LCODE AND r1.[NO] <= r.[NO]
)x
我有两个 tables Issue
和 Received
。我想得到同一行问题的结果。
问题table:
NO | LCODE | PCS |
---|---|---|
1 | L0001 | 10 |
2 | L0002 | 25 |
3 | L0003 | 75 |
4 | L0004 | 12 |
5 | L0005 | 15 |
收到table:
NO | LCODE | PCS |
---|---|---|
1 | L0001 | 5 |
2 | L0001 | 5 |
3 | L0003 | 48 |
4 | L0003 | 12 |
5 | L0003 | 15 |
想要的结果:
NO | LCODE | ISSPCS | RECPCS | BAL |
---|---|---|---|---|
1 | L0001 | 10 | 5 | 5 |
2 | L0001 | 0 | 5 | 0 |
3 | L0003 | 75 | 48 | 27 |
4 | L0003 | 0 | 12 | 15 |
5 | L0003 | 0 | 15 | 0 |
6 | L0004 | 12 | 0 | 12 |
7 | L0005 | 15 | 0 | 15 |
SELECT ROW_NUMBER() OVER(PARTITION BY i.LCODE ORDER BY i.LCODE) as NO,
i.LCODE,i.PCS as ISSPCS,r.PCS as RECPCS,(i.PCS-r.PCS) as BAL
FROM Issue i
LEFT JOIN Received r ON i.LCODE = r.LCODE
找到获得此结果的最佳方法谢谢。
试试这个代码:
SELECT ROW_NUMBER() OVER ( ORDER BY i.LCODE ASC, RunninngSum ASC) AS [NO]
, i.LCODE
, CASE WHEN RunninngSum > r.PCS THEN 0 ELSE i.PCS
END AS ISSPCS
, ISNULL( r.PCS, 0) AS RECPCS
, i.PCS - ISNULL( RunninngSum, 0) as BAL
FROM Issue i
LEFT JOIN Received r ON i.LCODE = r.LCODE
CROSS APPLY (
SELECT SUM( r1.PCS) AS RunninngSum
FROM Received r1
WHERE r1.LCODE = r.LCODE AND r1.[NO] <= r.[NO]
)x