【问题标题】:How to LEFT JOIN in SQL so that I can get a count of 0 to show up如何在 SQL 中左连接,以便我可以得到 0 的计数来显示
【发布时间】:2016-03-12 20:18:49
【问题描述】:

我正在尝试从 2 个表(CUSTOMER 和 SAMPLE)生成一个如下所示的列表:

Location     Program    Sample Count   Total $$$
1              A         200            1234.56
1              B         500            7890.12
1              C         0              0
2              A         1000           9876.54
2              B         0              0
2              C         250            2345.67

但这就是我要结束的事情:

Location     Program    Sample Count   Total $$$
1              A         200            1234.56
1              B         500            7890.12
2              A         1000           9876.54
2              C         250            2345.67

这是我正在使用的查询

select s.LOCATION, c.PROGRAM_CODE, count(*),
    sum(NVL(s.PRICE_AMOUNT,0) + NVL(s.RUSH_CHARGE,0) + NVL(s.ADD_TEST_PRICE,0))
from CUSTOMER c
left join SAMPLE s on c.ID = s.CUSTOMER
where 
((NVL(s.PRICE_AMOUNT,0) + NVL(s.RUSH_CHARGE,0) + NVL s.ADD_TEST_PRICE,0)) > '0.00') 
group by s.LOCATION, c.PROGRAM_CODE
order by s.LOCATION, c.PROGRAM_CODE

任何帮助将不胜感激。提前致谢!

【问题讨论】:

    标签: sql oracle join left-join


    【解决方案1】:

    因为您的条件包括“> '0.00'

    where ((NVL(s.PRICE_AMOUNT,0) + NVL(s.RUSH_CHARGE,0) + NVL s.ADD_TEST_PRICE,0)) > '0.00') 
    

    应该是

    where ((NVL(s.PRICE_AMOUNT,0) + NVL(s.RUSH_CHARGE,0) + NVL s.ADD_TEST_PRICE,0)) >= '0.00')
    

    【讨论】:

      【解决方案2】:

      我看到的唯一问题是您在代码中使用 > 而不是 >=,因此您只能获得大于 0 的项目。只需将 WHERE 条件更改为

      where ((NVL(s.PRICE_AMOUNT,0) + NVL(s.RUSH_CHARGE,0) + NVL s.ADD_TEST_PRICE,0)) >= 0.00) 
      

      请记住,对于数字,您不需要在值周围添加',因此您只需使用0.00,而不是'0.00'

      【讨论】:

        【解决方案3】:

        假设:

        1. 任何没有样品的客户都应该退货
        2. 如果客户有一个样本,但其总数为 0.00,您希望将其从结果中排除...

        你需要一个 OR...

        (((NVL(s.PRICE_AMOUNT,0) + NVL(s.RUSH_CHARGE,0) + NVL s.ADD_TEST_PRICE,0)) > '0.00')
         OR S.Customer is null)
        

        但是,如果您只是想退回所有客户,那么其他两个答案是正确的。通过调整为 '>=...' 而不是 '>'

        【讨论】:

          猜你喜欢
          • 2018-03-07
          • 2011-09-22
          • 1970-01-01
          • 1970-01-01
          • 2011-01-14
          • 2014-08-08
          • 1970-01-01
          • 1970-01-01
          • 2021-10-19
          相关资源
          最近更新 更多