Sql - 与case语句一起使用的Sum函数

时间:2015-01-20 17:29:44

标签: mysql sql

希望大家在2015年新的一年里表现不错。我正在使用nateeza / aginity api来运行以下查询。它是与case语句结合使用的sum函数。

    Select ID1,ID2,SeqNo, sum(case when e.cust_no is not null then 1 else 0 end) as countofcustnumber
from tableA
left join table b on a.value1=b.value1
left join table c on b.value2=c.value2
left join table d on c.id_no=d.id_no
left join table e on d.cust_no=e.cust_no
group by id1,id2,seqno
having sum(case when e.cust_no is not null then 1 else 0 end) = 0 
--having sum(case when e.cust_no is not null then 1 else 0 end) = 1

这背后的想法是使用第一个having语句来生成所有idin,id2,seqno的数据集,这些数据集没有cust_no附属于它们。如果我的逻辑是正确的,那么第二个具有当前注释掉的语句应该产生一个所有id1,id2,seqno的数据集,它们至少有一个cust_no附属于它们。

然而,当我运行这个查询时,我发现有一堆id1,id2,seqno显示在结果数据集中,对于第一个没有注释掉的语句,cust_no不为null ..

有人可以让我知道我在这里做错了什么。提前谢谢。

编辑:目前,当我使用第一个语句时,我得到以下结果:

ID1 ID2 SEQNO, COUNTOFcustnumber 
a1  c1   123    0
a2  c2   456    0

但是,当我去深入了解ID a1时,其中有一堆客户与该ID相关联,我发现有客户拥有有效的客户#。这个查询的重点是找到一个ID列表,其中包含没有有效客户#的客户,如果这是有意义的话。这就是我使用countofcustnumber的原因,0表示没有客户拥有有效的客户ID。

目前在更深入的分析中,我发现如果我取第一个结果集ID = a1,ID2 = c1和SeqNo = 123,则有以下客户与a1 / c1 / 123相关。我使用以下查询来查找客户

  Select ID1,ID2,SeqNo, d.id_no, e.cust_no    from tableA
left join table b on a.value1=b.value1
left join table c on b.value2=c.value2
left join table d on c.id_no=d.id_no
left join table e on d.cust_no=e.cust_no
where ID1 in ('a1')

我得到了结果:

a1  c1  123  d1  3456

注意:a1是在我的帖子开始时运行查询而不是直接在上面的查询。

我期待结果:

a1  c1  123  d1   null

a1  c1  123  null  null

0 个答案:

没有答案