如何将以前的行值和当前行值相加到新列? 从这个查询:
SELECT
A.DATE,
A.SHIFT,
A.RECEIPT,
A.ISSUE
FROM
(SELECT
B.DATE,
B.SHIFT,
CASE WHEN B.JUDUL='ISSUE' THEN B.QTY END AS ISSUE,
CASE WHEN B.JUDUL='RECEIPT' THEN B.QTY END AS RECEIPT
FROM
(SELECT
T1.DATE AS DATE,
T1.SHIFT AS SHIFT
SUM(T1.QTY) AS QTY,
'ISSUE' AS JUDUL
FROM
ISSUE T1
WHERE
T1.PO=[%0]
GROUP BY
T1.DATE
UNION
SELECT
T2.DATE AS DATE,
T2.SHIFT AS SHIFT,
SUM(T2.QTY) AS QTY,
'RECEIPT' AS JUDUL
FROM
RECEIPT T2
WHERE
T2.PO=[%0]
GROUP BY
T2.DATE) B) A
我的结果是这样的:
DATE SHIFT RECEIPT ISSUE
02.01.18 1 39.20 204.20
02.01.18 2 112.95 145.60
02.01.18 3 125.46 0.00
03.01.18 1 131.72 145.60
03.01.18 2 132.79 145.60
03.01.18 3 118.28 72.85
04.01.18 1 122.04 145.60
04.01.18 2 155.08 72.80
04.01.18 3 116.98 72.80
05.01.18 1 91.69 145.60
但实际上我需要这样的结果:
DATE SHIFT RECEIPT ISSUE TotalReceipt TotalIssue VAR
02.01.18 1 39.20 204.20 39.20 204.20 165.00
02.01.18 2 112.95 145.60 152.15 349.80 197.65
02.01.18 3 125.46 0.00 277.61 349.80 72.19
03.01.18 1 131.72 145.60 409.33 495.40 86.07
03.01.18 2 132.79 145.60 542.12 641.00 98.88
03.01.18 3 118.28 72.85 660.40 713.85 53.45
04.01.18 1 122.04 145.60 782.44 859.45 77.01
04.01.18 2 155.08 72.80 937.52 932.25 -5.27
04.01.18 3 116.98 72.80 1,054.50 1,005.05 -49.45
05.01.18 1 91.69 145.60 1,146.19 1,150.65 4.46
我需要前一班次日的数据来比较问题收据交易之间的数据。
答案 0 :(得分:1)
您可以使用累积和函数(ANSI SQL):
with t as (
<your query here>
)
select t.*,
sum(receipt) over (order by date, shift) as totalreceipt,
sum(issue) over (order by date, shift) as totalissue,
sum(issue - receipt) over (order by date, shift) as variance
from t;
答案 1 :(得分:0)
使用Window Function
,您可以实现这一目标。
试试这个:
SELECT
A.DATE,
A.SHIFT,
A.RECEIPT,
A.ISSUE,
SUM(A.RECEIPT) OVER (ORDER BY A.DATE, A.SHIFT) AS TotalReceipt,
SUM(A.ISSUE) OVER (ORDER BY A.DATE, A.SHIFT) AS TotalIssue,
SUM(A.ISSUE - A.RECEIPT) OVER (ORDER BY A.DATE, A.SHIFT) AS VAR
FROM
(SELECT
B.DATE,
B.SHIFT,
CASE WHEN B.JUDUL='ISSUE' THEN B.QTY END AS ISSUE,
CASE WHEN B.JUDUL='RECEIPT' THEN B.QTY END AS RECEIPT
FROM
(SELECT
T1.DATE AS DATE,
T1.SHIFT AS SHIFT
SUM(T1.QTY) AS QTY,
'ISSUE' AS JUDUL
FROM
ISSUE T1
WHERE
T1.PO=[%0]
GROUP BY
T1.DATE
UNION
SELECT
T2.DATE AS DATE,
T2.SHIFT AS SHIFT,
SUM(T2.QTY) AS QTY,
'RECEIPT' AS JUDUL
FROM
RECEIPT T2
WHERE
T2.PO=[%0]
GROUP BY
T2.DATE) B) A