找回密码
 立即注册

QQ登录

只需一步,快速开始

swejet 悬赏达人认证 活字格认证
论坛元老   /  发表于:2021-9-28 16:52  /   查看:1670  /  回复:3
10金币
有一个表,有这么几个字段:设备名,工作日期,生产时间

一共有1400多个设备,当天列入计划的运行设备就会有记录,但是每天列入计划的设备只有几百台,所以每天都有几百行记录,而列入计划的这几百台设备不一定全开机,每天开哪些设备不一定,只要设备列入计划了,就有记录,列入计划了但是设备当天没开,生产时间即为0

我想求每天开的设备和没开的设备各是多少,在一行sql语句里,这要怎么写?

下面的语句可以求出生产时间大于0的设备数,但是每天列入计划的设备数要怎么求呢?where 子句有矛盾啊,我要求开机的设备,就要在where 子句里加 生产时间 > 0这个条件,语句如下:

select 日期,count(*) 生产台数 from machine where 日期 between '2010-1-1' and '2010-12-31' and 生产时间 > 0 group by 日期 order by 日期

可是要求每天的所有设备,就不能加 生产时间 > 0 这个子句,这要怎么写?

最佳答案

查看完整内容

您这没有工程文件,也不能测啊, 盲写一波试试 select 日期,sum( case when 生产时间 > 0 than 1 else 0 end ) as 开机生产台数, sum( case when 生产时间 = 0 than 1 else 0 end ) as 关机生产台数 from machine where 日期 between '2010-1-1' and '2010-12-31' group by 日期 order by 日期

3 个回复

倒序浏览
最佳答案
最佳答案
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-9-28 16:52:13
来自 2#
您这没有工程文件,也不能测啊,
盲写一波试试
select 日期,sum( case  when 生产时间 > 0  than 1 else 0   end )  as 开机生产台数,
sum( case  when 生产时间 = 0  than 1 else 0   end )  as 关机生产台数
from machine where 日期 between '2010-1-1' and '2010-12-31'  group by 日期 order by 日期
回复 使用道具 举报
swejet悬赏达人认证 活字格认证
论坛元老   /  发表于:2021-9-29 08:39:49
3#
会了,case 还真没用过,我在datagrip 里,提示用 iif替换

case  when 生产时间 > 0  than 1 else 0   end

可以写成:

IIF(SCSJ > 0, 1, 0)

我执行了是正确的,sql 实例是 ms-sqlserver 2019
回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-9-29 08:52:07
4#
感谢您对活字格的支持。
后面有问题,欢迎继续发新帖交流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部