首页 > 解决方案 > JOIN 中的条件 IIF

问题描述

我有下一个数据库:

关系

表账单:

表账单

表 Bill_Details:

表 Bill_Details

和表类型:

表类型

我想要一个查询来显示这个结果:

需要

到目前为止的查询是这样的:

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;

有了这个结果:

查询3

我不知道如何处理或如何包括这个:

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)), "" )

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

标签: sqlms-access

解决方案


这是您从问题中删除的 UNION 的修订版本。最初的查询是一个好的开始,但您只是没有提供有关您遇到的错误或问题的足够详细信息。我的评论并不是要您删除问题查询,只是您需要提供有关错误或问题的更多详细信息。将来,如果您有一个 UNION,请确保 UNION 的每个查询单独工作。然后你可以更容易地调试问题,一次一步。

我在 UNION 的第二个查询中纠正的问题:

  • 删除了查询中对表 [Type] 的引用,因为它不是 FROM 子句的一部分。相反,我将其替换为文字值。
  • 修复了 FROM 子句以连接 [Bill] 和 [Bill_Details] 表。您有来自两个表的字段,那么为什么不像在 UNION 的第一个查询中那样加入它们呢?
  • 对 SELECT 子句中引用的表 [Bill] 中的所有字段进行分组。您必须对所有字段进行分组,或者将它们包含在 Sum() 或 First() 等聚合表达式中。
  • 对于 Iif() 语句中的 False 情况,将空字符串替换为 Null。

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;

推荐阅读