2 sinat 38628433 sinat_38628433 于 2017.09.03 22:09 提问

初做后端,请教大神sql业务逻辑——单表选择(oracle,mybatis)

现在有一个统计表(departmentName,time,status(状态有三种))

我现在给出的有条件有 departmentName,startTime,endTime,

要选出每个departmentName,在开始和结束时间里面,的不同status的数量和在这个时间里面的总数,,,得到下表:

(部门名称,订单总数,未出货订单数,已出货订单数,以签收订单数)

求大神赐教!!!!

3个回答

songwz123
songwz123   2017.09.04 11:30

select 部门名称, sun(订单总数) , sun(未出货订单数) ,sun(已出货订单数),sun(以签收订单数), from a where startTime<=time and endTime>=time group by departmentName,status

m0_38093650
m0_38093650   2017.09.04 11:38

select departmentName 部门名称, sum(0) 订单总数, sum(case state when 0 then 1) 未出货订单数,sum(case state when 1 then 1) 已出货订单数,sum(case state when 2 then 1) 以签收订单数, from table where startTime<=time and endTime>=time group by departmentName

state 中0表示 未出货订单数
中1表示 已出货订单数
中2表示 以签收订单数

sunbocong
sunbocong   2017.09.06 19:56

把上面的答案修改下就可以了
假设表名为t
state 中0表示 未出货订单数
中1表示 已出货订单数
中2表示 以签收订单数

SELECT DEPARTMENTNAME AS 部门名称,
COUNT(*) AS 订单总数,
SUM(CASE STATUS
WHEN 0 THEN
1
ELSE
0
END) AS 未出货订单数,
SUM(CASE STATUS
WHEN 1 THEN
1
ELSE
0
END) 已出货订单数,
SUM(CASE STATUS
WHEN 2 THEN
1
ELSE
0
END) 已签收订单数
FROM T
WHERE TIME BETWEEN STARTTIME AND ENDTIME
GROUP BY DEPARTMENTNAME
ORDER BY DEPARTMENTNAME;

Csdn user default icon
上传中...
上传图片
插入图片