如何在SQL中使用case语句

时间:2014-11-28 21:11:38

标签: mysql sql sql-server-2008

我在SQL中有这种情况,我需要显示dr_DRVNUM,DR_DRVNAME&多天工作相同轮班的司机的工作天数。

我在SQL中有这个代码,到目前为止我也尝试了不同的代码,但仍然没有运气

select dr_drvname, dr_drvnum, sh_wkdate
case  when sh_drvnum = dr_drvnum and sh_wkshift = 'DAY' then count(sh_wkdate)
end 
from driver, shift

我有一张桌子,我正在上传下表格图片的一部分,

DR_DRVNUM      DR_DRVNAME           SH_WKDATE        SH_WKSHIFT 

0001           Cooper, Randolph B.  15-NOV-07        DAY
0001           Cooper, Randolph B.  15-NOV-07        DAY
0001           Cooper, Randolph B.  15-NOV-07        DAY
0001           Cooper, Randolph B.  15-NOV-07        EVE
0001           Cooper, Randolph B.  15-NOV-07        EVE
0001           Cooper, Randolph B.  15-NOV-07        EVE
0001           Cooper, Randolph B.  15-NOV-07        NIG
0001           Cooper, Randolph B.  15-NOV-07        NIG
0001           Cooper, Randolph B.  15-NOV-07        NIG
0001           Cooper, Randolph B.  16-NOV-07        DAY
0001           Cooper, Randolph B.  16-NOV-07        DAY
0001           Cooper, Randolph B.  16-NOV-07        DAY
0001           Cooper, Randolph B.  16-NOV-07        DAY
0001           Cooper, Randolph B.  16-NOV-07        DAY
0001           Cooper, Randolph B.  16-NOV-07        DAY
0001           Cooper, Randolph B.  16-NOV-07        DAY
0001           Cooper, Randolph B.  16-NOV-07        EVE
0001           Cooper, Randolph B.  16-NOV-07        EVE

1 个答案:

答案 0 :(得分:0)

要理解你正在寻找的东西有点困难。将count与其他字段一起使用时,您应该使用group by子句。听起来你应该count使用case,如下所示:

select 
    dr_drvname, 
    dr_drvnum,
    sh_wkdate,
    count(case when sh_wkshift = 'DAY' then 1 end)
from driver d
    left join shift s on s.sh_drvnum = d.dr_drvnum
group by
    dr_drvname, 
    dr_drvnum,
    sh_wkdate

顺便说一句 - 它使用outer join加入驱动程序和移位表以返回所有驱动程序,即使它们没有移位。根据您所需的结果,您可能只使用inner join