我有购买记录的Access表称为记录。
Id | Type | Price | Date | Processed |
------------------------------------------------------
1 | C | 30€ | 01/01/2016 | Null |
------------------------------------------------------
2 | R | -30€ | 01/01/2016 | Null |
------------------------------------------------------
3 | C | 10€ | 02/02/2016 | Null |
------------------------------------------------------
4 | C | 10€ | 02/02/2016 | Null |
------------------------------------------------------
5 | R | -10€ | 02/02/2016 | Null |
------------------------------------------------------
6 | C | 25€ | 03/02/2016 | Null |
------------------------------------------------------
7 | C | 42€ | 04/02/2016 | Null |
------------------------------------------------------
我想要做的是设置为TRUE充电(类型“C”)谁拥有对相对退款记录(类型“R”)的记录。
就像这样:1C和1R =真
Id | Type | Price | Date | Processed |
------------------------------------------------------
1 | C | 30€ | 01/01/2016 | True |
------------------------------------------------------
2 | R | -30€ | 01/01/2016 | True |
------------------------------------------------------
3 | C | 10€ | 02/02/2016 | True |
------------------------------------------------------
4 | C | 10€ | 02/02/2016 | Null |
------------------------------------------------------
5 | R | -10€ | 02/02/2016 | True |
-----------------------------------------------------
6 | C | 25€ | 03/02/2016 | Null |
------------------------------------------------------
7 | C | 42€ | 04/02/2016 | Null |
------------------------------------------------------
到目前为止,我有这个,但它真正的设置所有的N个充电“C”记录
UPDATE
RECORDS AS T1
INNER JOIN RECORDS T2
ON ABS(T1.Price) = ABS(T2.Price) AND T1.Date =T2.Date
SET T1.Processed = TRUE
WHERE (T1.Type = 'C' AND T2.Type = 'R') OR (T1.Type = 'R' AND T2.Type = 'C')
随着EXISTS
:
UPDATE RECORDS AS T
SET T.Processed = TRUE
WHERE
(T.Type IN ('C', 'R') AND
EXISTS (SELECT 1 FROM RECORDS
WHERE Type IN ('C', 'R') AND Type <> T.Type AND Date = T.Date AND Price + T.Price = 0
)
)
AND T.Id = (SELECT MIN(ID) FROM RECORDS WHERE Date = T.Date AND Price = T.Price AND Type = T.Type)
在WHERE
最后一个条件包括在列Price
,Date
和Type
重复的情况。
结果:
Id Type Price Date Processed
1 C 30,00 1/1/2016 True
2 R -30,00 1/1/2016 True
3 C 10,00 2/2/2016 True
4 C 10,00 2/2/2016 NULL
5 R -10,00 2/2/2016 True
6 C 25,00 3/2/2016 NULL
7 C 42,00 4/2/2016 NULL