JOIN中的条件IIF

时间:2018-09-29 02:12:20

标签: sql ms-access

我有下一个数据库:

Relation

桌费:

Table Bill

表Bill_Details:

Table Bill_Details

和表类型:

Table Type

我希望查询显示此结果:

Need

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

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;

结果如下:

Query3

我不确定如何处理或如何添加此内容:

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

以前的代码负责在某些字段中包含新数据,因为所有其他字段都将携带高位寄存器的相同数据。我会很高兴地做到这一点。

1 个答案:

答案 0 :(得分:0)

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

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

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

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;