选择同一SQL表中的一对记录
我有一个名为RECORDS with purchase RECORDS的访问表选择同一SQL表中的一对记录,sql,vba,ms-access,Sql,Vba,Ms Access,我有一个名为RECORDS with purchase RECORDS的访问表 Id | Type | Price | Date | Processed | ------------------------------------------------------ 1 | C | 30€ | 01/01/2016 | Null | ---------------------------------------------
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 |
------------------------------------------------------
我要做的是将费用类型“C”记录设置为True,这些记录具有一对相反的退款记录类型“R”
像这样:1C和1R=True
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')
存在着:
价格和日期重复的存在可能会使这一点变得非常困难,如果不是Access SQL不可能的话。您是否考虑过VBA函数?但如果您在2016年2月2日添加另一条带-10的R记录,则不会将新行或ID 4标记为true。这只适用于给定日期的第一次信用和第一次退款,这可能适用于OP。这是供参考的,不是批评,因为它可能是好的,可能永远不会在同一天有两个费用的第二次退款。是的,这种情况下,只有一对价格相反的鞋在同一天将被更新。我不知道这是否包括要求。
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)
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