这样的SQL语句怎么写??(50分)

  • 主题发起人 主题发起人 风中的狼
  • 开始时间 开始时间

风中的狼

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库格式如下
车间名 设备名称 设备状态
一车间 车床一 运行中
一车间 车床二 停运中
一车间 车床三 检修中
.......
二车间 车床一 运行中
.......
.......
想要查询出的数据是这样
车间名 设备数 运行设备数 停运设备数 检修设备数

 
车间名和设备数可以这样:
select distinct 车间名,设备数 from yourtablename
运行设备数和停运设备、检修设备可以这样
select count(运行状态) from yourtablename where 运行状态=运行中
select count(运行状态) from yourtablename where 运行状态=停运中
select count(运行状态) from yourtablename where 运行状态=检修中
 
建议你将设备状态用1(运行中),2(停运中),3(检修中)表示
select 车间名,sum(case 设备状态 when 运行中 then 设备状态 else 0 end) as 运行设备数,
sum(case 设备状态 when 停运中 then 设备状态 else 0 end) as 停运设备数,
sum(case 设备状态 when 检修中 then 设备状态 else 0 end) as 检修设备数
from youtable group by 车间名
 
同意nsj的用在SQL中作用Case子句,但不能在Sum中使用Case,所以nsj的SQL需进行修改。
 
如果是Access数据库,可用交叉表来实现。
 
GZCYP:
谁告诉你说在Sum中不能使用CASE的,你试试下面的看行不行,
sum(case 设备状态 when 运行中 then 1 else 0 end) as 运行数量
 
应把nsj的改为
SELECT chejian, CASE zt WHEN 1 THEN COUNT(zt) ELSE 0 END AS 运行设备数,
CASE zt WHEN 2 THEN COUNT(zt) ELSE 0 END AS 停运设备数,
CASE zt WHEN 3 THEN COUNT(zt) ELSE 0 END AS 检修设备数
FROM [TEMP]
GROUP BY chejian, zt
zt字段包括运行,停运,检修
 
TO 楼上的各位兄弟
谢谢你们的帮忙!
但我还有不清楚的地方!
上面那个列出的数据库只是一种简化方式,是我偷懒了一下!
实际运行时设备的各种方式是由程序决定的:
车间名称 设备名称 上次大修时间 大修周期 上次小修时间 小修周期。。。。
(后面还有一长串,都是同样时间+周期,周期单位为月)
一车间 车床一 2000-01-01 36 2000-01-01 12
。。。。。。
想得到的数据为
车间名称 设备总数 大修超周期设备数 小修超周期设备数。。。。。

即:上次大修日期+大修周期<当前日期时,设备状态为大修超周期
上次小修时间+小修周期<当前日期时,设备状态为小修超周期
因为同一设备状态同时可能会有好几种,所以这儿应该怎么计算呢???
请指教!
不知道版主允不允许追加分数?

 

Similar threads

回复
0
查看
873
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部