如何在SQL中LEFT JOIN以便我可以显示0的计数

时间:2016-03-12 20:18:49

标签: sql oracle join left-join

我正在尝试从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

非常感谢任何帮助。提前谢谢!

3 个答案:

答案 0 :(得分:1)

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

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

请注意,使用数字时,您无需在值周围添加',因此您只需使用'0.00'而不是0.00

答案 1 :(得分:1)

因为您的条件包含“&gt;'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)

假设:

  1. 任何没有样品的客户都应该退货
  2. 如果客户有样品,但总计为0.00,则希望将其从结果中排除..
  3. 你需要一个OR ......

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

    但是,如果您只想返回所有客户,那么其他两个答案都是正确的。通过调整为&#39;&gt; = ...&#39;而不是&#39;&gt;&#39;