Sql 在两个表中查找不相等的行
我正在执行一个左连接查询,以便仅当F1列相同时,才比较f9和SUMOF6列上两个表是否存在任何不相等的值。如果它们不同,我想减去它们 我得到的结果显示了两个表中已经存在的相等值。我需要f1列在两个表上匹配,但如果它们在SUMOFF 6和f9列上的值不匹配,则显示它们并减去它们。F1在两个表上都是唯一的。请记住,语句表中可能有更多行。我正在使用MS Access SQL视图 质疑 最终分配:Sql 在两个表中查找不相等的行,sql,ms-access,Sql,Ms Access,我正在执行一个左连接查询,以便仅当F1列相同时,才比较f9和SUMOF6列上两个表是否存在任何不相等的值。如果它们不同,我想减去它们 我得到的结果显示了两个表中已经存在的相等值。我需要f1列在两个表上匹配,但如果它们在SUMOFF 6和f9列上的值不匹配,则显示它们并减去它们。F1在两个表上都是唯一的。请记住,语句表中可能有更多行。我正在使用MS Access SQL视图 质疑 最终分配: f1 SumOff6 -------------- 1 135.58 2 16
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;
非常简单,使用两个连接,每个连接代表两个条件,然后当两个条件都满足时,case when将进行减法(T1),或者当只有一个条件满足时,只给出第一个值(T)。如果我没有误解您的话。您想将f1列和匹配行中的两个表合并在一起,SUMOF6列和f9列是相同的,然后显示它们,如果它们不相同,则将它们减去。还好吗?您的预期结果是什么?要连接到f1列中具有唯一值的表。我想找出f9和SUMOF6列的不同之处,然后减去那些等于f1但f9/SUMOF6不同的列。这是否适用于access sql视图?因为我在查询的这一部分中遇到语法错误(缺少运算符)。如果t1.[sumoff6]为null,那么t.[f9]-t.[sumoff6]如果t1.[sumoff6]为null,那么t.[f9]将结束为[total],这给了我一个语法错误:语句。[f1]=allocation\u final。[f1]左连接allocation\u final t1 ON语句。[f1]=allocation\u final。[f1]你好,Matt我让查询正常工作了。我有个问题。它给了我f9和SUMOF6列之间的差异,但不准确。我认为这是因为语句列中有更多的行,因为f1在同一行的两个表中都不匹配,它认为f9值丢失,但实际上没有。有没有办法让查询搜索另一个表中的f1列,以确保SUMOF6值是否不同?换句话说,两个表中的f1列只是在不同的行中出现,而查询认为在另一个表中缺少该列。所有这些查询只有在f1与两个表上的行逐行匹配时,我才能从工作中获得帮助。我已使两个表在f1列上相等,没有重复的行。但是,即使我将f1=f1和f9 SUMOF6放在输出查询中,我仍然会得到行数相等的数据。有人能帮忙吗?我正在使用左连接,所以不知道为什么我会得到这个。嗨,Marlan。此查询仍会减去f9、SUMOF6列,即使分配为_final.f1 statement.f1。f1不确定其是否正确,因为两个表中的f1不完全匹配,因为语句表中的行数更多。
f1 f9
--------------
1 135.58
2 166.3
4 86.46
5 170.33
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
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]
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]