【问题标题】:How to use case statment in SQL如何在 SQL 中使用 case 语句
【发布时间】:2014-11-28 21:11:38
【问题描述】:

我在 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

【问题讨论】:

  • mysql 还是 sql-server?
  • Cooper 是否有几个日班,例如07 年 11 月 15 日还是应该算作一个班次?如果有,为什么要重复行?
  • 谢谢你们,我想通了。顺便说一句,我想做的是,如果库珀在安全轮班前“DAY,OR EVE OR NIG”工作超过一天,那么如果他在 11 月 15 日 Day/NIG/EVE 轮班工作,那么它的计算天数只有那么 fucntion不算数

标签: mysql sql sql-server-2008


【解决方案1】:

理解您要查找的内容有点困难。将count 与其他字段一起使用时,您应该使用group by 子句。听起来您应该像这样使用countcase

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

【讨论】:

  • 感谢您的帮助。例如,库珀在 15-nov-07 上白班,在 17-nov-07 上同样班次。我有一张 11 月 15 日到 18 日的桌子。如果库珀每天白班工作,它说 4,我需要什么,如果他在三天工作 3 日班,它说 3,它对“NIG”或“EVE”的工作方式相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 2012-12-16
相关资源
最近更新 更多