今天的另一个问题:)
写了一个完美的查询 - 除了我希望它将NULL / 0值显示为0 - 并且 - 它不会发生。我试着接近这两种方式:
首先我使用isnull()
Select isnull(Count(*),0) as Total ,
z.zname
From STable s ,
SLTable sl ,
ZTable z ,
SETable se ,
SEETable see ,
SEGTable seg
Where s.sID = sl.sID
and sl.zID = z.zID
and s.sID = se.sID
and se.etID = see.etID
and see.segID = seg.segID
and see.segID = 3
Group By z.zname
order by z.zname
似乎没有给我Null / 0值
然后我尝试使用sum / case方法
Select sum(case when see.segID <> 3 then 0 else 1 end) as Total ,
z.zname
From STable s ,
SLTable sl ,
Table z ,
SETable se ,
SEETable see ,
SEGTable seg
Where s.sID = sl.sID
and sl.zID = z.zID
and s.sID = se.sID
and se.etID = see.etID
and see.segID = seg.segID
and see.segID = 3
Group By z.zname
order by z.zname
仍然没有0值 - 所以现在我很难过:(
答案 0 :(得分:0)
实际上只是为了半回答我自己的问题 - 只是意识到哪里 - see.segID-3 - 所以它只会产生segID = 3的结果 - 所以它不能没有3 - 对吗?
但我特意将segIDs视为3 - 只是,如果没有任何内容则显示0
答案 1 :(得分:0)
这是我假设您需要更改的内容
Select
Count(*) as Total,
z.zname
From STable s, SLTable sl, ZTable z, SETable se, SEETable see, SEGTable seg
Where s.sID=sl.sID
and sl.zID=z.zID
and s.sID=se.sID
and se.etID=see.etID
and see.segID=seg.segID
and see.segID=3
AND TABLE.YOURCOLUMN IS NOT NULL -- THESE ARE
AND TABLE.YOURCOLUMN <> 0 -- NEW
GROUP BY z.zname
ORDER BY z.zname
答案 2 :(得分:0)
在您的查询中 isnull(Count(*),0)为Total,
Count永远不会返回null,它将是0到n之间的数值。
所以你的无聊状态永远不会满足。
你可以简单地将select count()写为total ..而不是isnull(Count(),0),当它在表中找不到任何行时它将返回0。
答案 3 :(得分:0)
嗯,目前还不清楚你究竟想要找到什么。但是,您的问题很大一部分是您使用的是旧式的ISO / ANSI join
语法。如果您重构联接以使用现代join
语法,那么您将获得一个看起来很多(实际上很多)的查询:
select zName = z.zname ,
Total = count(*)
From ZTable z
join SLTable sl on sl.zID = z.zID
join STable s on s.sID = sl.sID
join SETable se on se.sID = s.sID
join SEETable see on see.etID = se.etID
and see.segID = 3
join SEGTable seg on seg.segID = see.segID
Group By z.zname
order by z.zname
我怀疑您想要获得的是所有 zNames
的列表以及他们对segID = 3
的尊重。由于您使用的是内部连接,因此您只能看到匹配的zNames
。你能做的就是这样:
select zName = z.zname ,
Total = sum(case see.segID when 3 then 1 else 0 end)
from ZTable z
left join SLTable sl on sl.zID = z.zID
left join STable s on s.sID = sl.sID
left join SETable se on se.sID = s.sID
left join SEETable see on see.etID = se.etID
group By z.zname
order by z.zname
上述内容将至少从zTable
返回每行行一次,其中null
个值列表中找不到匹配项。然后我们对它进行分组并计算segID
为3的行。