在两个表中查找不相等的行

时间:2018-08-16 12:12:05

标签: sql ms-access

我正在做一个左联接查询,以仅在F1列相同的情况下比较两个表的f9和sumoff6列上彼此不相等的任何值。如果它们不同,我想减去它们。

我得到的结果显示两个表上已经相等的值。我需要f1列在两个表上都匹配,但是如果它们在sumoff6和f9列上的值不匹配,则显示它们并减去它们。 F1在两个表上都是唯一的。请记住,尽管语句表中可能有更多的行。我正在使用MS Access SQL视图。

查询

SELECT statement.f1, statement.f9
FROM statement 
LEFT JOIN allocation_final ON statement.[f1] = allocation_final[f1]
WHERE [allocation_final].sumoff6 <> statement.f9

声明表:

f1     f9
-----------------
1      135.58
2      166.30
3       40.22 
4       86.46
5      170.33
6       96.40

allocation_final:

f1     SumOff6
--------------
1      135.58
2      166.30
3       40.00
4       86.46
5      170.33
6       40.22 
7       22.40
8       70.00
9       96.40
10      50.00

结果

f1     f9                 
--------------
1      135.58
2      166.3
4       86.46
5      170.33

更新:

我想要的结果是,如果f1 = f3和f3 <> sumoff6,则显示输出。如下所示,例如,如果结果相同,它仍然会显示结果。查看第一行,该行不应该出现在第一行,因为f9 = sumoff6。

查询:

SELECT statement.f1, statement.f9, allocation_2.[f3], allocation_2.sumoff6
FROM allocation_2 LEFT JOIN statement ON allocation_2.[f3]=statement.f1
WHERE statement.f9 <> allocation_2.sumoff6
GROUP BY statement.f1, statement.f9, allocation_2.[f3], allocation_2.sumoff6
ORDER BY statement.f1;

输出:

f1            f9     f3        sumoff6
--------------------------------------
123456789   135.58  123456789   135.58
111111111   166.3   111111111   66.3
222222222   86.46   222222222   86.46
333333333   170.33  333333333   170.33
444444444   135.58  444444444   35.58
555555555   125.74  555555555   125.74
666666666   73.49   666666666   23.49
777777777   187.99  777777777   87.99

2 个答案:

答案 0 :(得分:1)

SELECT statement.f1, iif([allocation_final].sumoff6 = statement.f9, statement.f9, [allocation_final].sumoff6 - statement.f9)
FROM statement LEFT JOIN allocation_final 
ON statement.[f1] = allocation_final[f1]

答案 1 :(得分:0)

SELECT 
switch(t1.[sumoff6] is null,t.[f9] - t.[sumoff6],
t1.[sumoff6] is not null, t.[f9])
FROM statement 
LEFT JOIN allocation_final t ON statement.[f1] = allocation_final[f1] 
LEFT JOIN allocation_final t1 ON statement.[f1] = allocation_final[f1] AND 
statement.[f9] = allocation_final[sumoff6]

非常简单,使用两个联接,每个联接代表两个条件,然后在两个条件都满足时(T1)减去的情况,或者仅在一个条件满足(T)时给出第一个值的情况。