【问题标题】:How to calculate the difference of two SELECTs in SQL (Access, JetSQL)如何计算 SQL 中两个 SELECT 的差异(Access、JetSQL)
【发布时间】:2020-04-12 11:25:59
【问题描述】:

我需要从同一个表连接中获取两个SUM...WHERE 查询的区别:

SELECT SUM(Service_template.Service_fee)
FROM (Service_template LEFT JOIN Service ON Service_template.Service_Code = Service.Service_Code) LEFT JOIN Bill ON Service.Service_ID = Bill.Service_ID
WHERE Bill.Service_ID IS NOT NULL

SELECT SUM(Service_template.Service_fee)
FROM (Service_template LEFT JOIN Service ON Service_template.Service_Code = Service.Service_Code) LEFT JOIN Bill ON Service.Service_ID = Bill.Service_ID

我尝试使用UNION,但它返回两行,而不是我可以计算的两列。

我该怎么做呢?我觉得我错过了一些琐碎的事情,所以提前谢谢!

【问题讨论】:

    标签: sql ms-access join jet-sql


    【解决方案1】:

    如果你想要所有三个值,你可以使用条件聚合:

    SELECT SUM(IIF(b.Service_ID IS NOT NULL, st.Service_fee, 0)) as total_1,
           SUM(b.Service_Id) as total_2,
           SUM(IIF(b.Service_ID IS NULL, st.Service_fee, 0)) as diff      
    FROM (Service_template as st LEFT JOIN
          Service as s
          ON st.Service_Code = s.Service_Code
         ) LEFT JOIN
         Bill as b
         ON s.Service_ID = b.Service_ID;
    

    如果您只想要SUM(),其中Service_IdNULL,那么:

    SELECT SUM(b.Service_Id) as diff      
    FROM (Service_template as st LEFT JOIN
          Service as s
          ON st.Service_Code = s.Service_Code
         ) LEFT JOIN
         Bill as b
         ON s.Service_ID = b.Service_ID
    WHERE b.Service_ID IS NULL;
    

    【讨论】:

      【解决方案2】:

      这应该可行:

      Select
        Sum(T1.Sum1),
        Sum(T2.Sum2),
        Sum(T1.Sum1) - Sum(T2.Sum2) As Diff1,
        Sum(T2.Sum2) - Sum(T1.Sum1) As Diff2
      From
        (SELECT SUM(Service_template.Service_fee) As Sum1 FROM (Service_template LEFT JOIN Service ON Service_template.Service_Code = Service.Service_Code) LEFT JOIN Bill ON Service.Service_ID = Bill.Service_ID WHERE Bill.Service_ID IS NOT NULL) As T1,
        (SELECT SUM(Service_template.Service_fee) As Sum2 FROM (Service_template LEFT JOIN Service ON Service_template.Service_Code = Service.Service_Code) LEFT JOIN Bill ON Service.Service_ID = Bill.Service_ID) As T2
      

      【讨论】:

      • 谢谢,选择了@gordon-linoff 的解决方案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多