Sql 连接中的条件IIF

Sql 连接中的条件IIF,sql,ms-access,Sql,Ms Access,我有下一个数据库: 附表条例草案: 表1工程量清单详情: 和表格类型: 我需要一个查询来显示此结果: 查询如下所示: SELECT Bill.Id_Bill, Type.Id_Type, Type.Info, Bill_Details.Deb, Bill_Details.Cre, Bill.NIT, Bill.Date2, Bill.Comt FROM Type RIGHT JOIN (Bill INNER JOIN Bill_Details ON Bill.Id_Bi

我有下一个数据库:

附表条例草案:

表1工程量清单详情:

和表格类型:

我需要一个查询来显示此结果:

查询如下所示:

SELECT 

Bill.Id_Bill, 
Type.Id_Type, 
Type.Info, 
Bill_Details.Deb, 
Bill_Details.Cre, 
Bill.NIT, 
Bill.Date2, 
Bill.Comt

FROM Type 

RIGHT JOIN (Bill INNER JOIN Bill_Details 
ON Bill.Id_Bill = Bill_Details.Id_Bill)
ON Type.Id_Type = Bill_Details.Id_Type

ORDER BY Bill.Id_Bill, Type.Id_Type;
因此:

我不确定如何处理或如何包括:

Type.600, 
Type."TOTAL",
IIF(SUM(Bill_Details.Deb) - Sum(Bill_Details.Cre) >= 0, ABS(SUM(Bill_Details.Deb) - Sum(Bill_Details.Cre)), "" ), 
IIF(SUM(Bill_Details.Deb) - Sum(Bill_Details.Cre) <= 0, ABS(SUM(Bill_Details.Deb) - Sum(Bill_Details.Cre)), "" )

前面的代码负责在某些字段中包含新数据,因为所有其他字段都将携带上层寄存器的相同数据。我想提出一些建议来完成这项工作

这是你从问题中删除的工会的修订版。最初的查询是一个良好的开端,但您只是没有提供有关所遇到的错误或问题的足够详细信息。我的评论并不是要你删除问题查询,只是你需要提供关于错误或问题的更多细节。将来如果您有一个联合,请确保联合的每个查询都单独工作。这样你就可以一步一步地调试问题了

我在工会第二次询问中纠正的问题:

删除了查询中对表[Type]的引用,因为它不是FROM子句的一部分。相反,我将其替换为一个文本值。 修复了FROM子句连接[Bill]和[Bill_Details]表的问题。两个表中都有字段,那么为什么不像联合的第一个查询那样对它们进行连接呢? 根据SELECT子句中引用的表[Bill]中的所有字段分组。您必须对所有字段进行分组,或者将它们包含在聚合表达式中,如Sum或First等。 将Iif语句上的假大小写的空字符串替换为null。
在查看了所有共享的细节之后,实际问题没有得到充分的描述。有时,额外的细节是可以的,但实际上,您只需要在最后一次查询中发布问题以及错误或问题的精确描述。告诉我们提示输入的内容。。。哪些数据字段是访问提示。有可能只是Access无法识别某个字段的输入错误。更一般地说,请参见。联合中的两个查询是否分别工作?第二个查询引用了Type.Info,但FROM子句中没有引用该表。谢谢您的建议,我会将其缩短。老兄,非常感谢!解释得很好!我会详细检查这个问题,所以有用请,你能告诉我要编辑什么或者如何显示这个问题有用吗?为了获得正面或零票,我不想编辑,因为问题已经被查看和回答,我的接受度更差,即使您对它进行了改进,它也可能不会获得很多升级票,因为它处理联合和聚合查询的基本概念。我希望它对您有用,但其他人认为这是一个基本的教程类型的问题,可以通过以其他方式研究Access SQL来回答。他们可能不认为这是一个对许多用户有用的非常关键的问题,但他们可能认为这是一个专门针对您的情况的问题。这些类型很少能得到很多支持。你的问题有很多积极的方面,比如对数据的清晰解释,示例数据,预期输出,以及你尝试的代码示例——这些都是好事。但与其他问题相比,它也很长。太多的数据图像会让用户望而却步。最初的问题对错误的描述也不完整,对SQL的描述有点混乱。这可能就是为什么你得到了最初的反对票。但即使在编辑之后,也不清楚您需要什么。因为我读了你的原稿和编辑过的文章,所以我能更好地理解你,但是其他用户在编辑后可能仍然感到困惑。
SELECT 
    Bill.Id_Bill, Type.Id_Type, Type.Info,
    Bill_Details.Deb, 
    Bill_Details.Cre, 
    Bill.NIT, Bill.Date2, Bill.Comt
FROM 
    Type RIGHT JOIN (Bill INNER JOIN Bill_Details
        ON Bill.Id_Bill = Bill_Details.Id_Bill)
    ON Type.Id_Type = Bill_Details.Id_Type;

UNION

SELECT 
    Bill.Id_Bill, 600 As Id_Type, "TOTAL" As Info,
    IIF(SUM(Bill_Details.Deb) - Sum(Bill_Details.Cre) >= 0, ABS(SUM(Bill_Details.Deb) - Sum(Bill_Details.Cre)), Null ) As Deb, 
    IIF(SUM(Bill_Details.Deb) - Sum(Bill_Details.Cre) <= 0, ABS(SUM(Bill_Details.Deb) - Sum(Bill_Details.Cre)), Null ) As Cre,
    Bill.NIT, Bill.Date2, Bill.Comt

FROM Bill INNER JOIN Bill_Details
    ON Bill.Id_Bill = Bill_Details.Id_Bill

GROUP BY Bill.Id_Bill, Bill.NIT, Bill.Date2, Bill.Comt;