case when。。。else。。。end

今天做某个查询结果的测试时,由于查询结果中的状态有多种情况,故而想到用case when。。。else。。。end这样的sql来简化查询。但是使用过程中发现,这个语句中只允许有两种情况(符合条件一种;不符合条件为另一种),而我要的查询结果分3种情况。

在这里遇到了一点小麻烦,但是经过小小的实验,发现该语句可以嵌套使用,这样就方便了很多。以下是我的示例:

需求:获取所有报告当前的状态;

数据库表:

1,报表信息表:报告Id,报告人,报告时间,取消人,取消时间(其中取消人和取消时间在该报告没有被取消的情况下为空)

2,报告处理表:处理Id,报告Id,处理人,处理时间,处理状态(一个报告可能有多种处理状态)

所有报告的情况有:

1,新报告:没有被取消也没有开始处理的报告,用1表示其状态;

2,被取消的报告(注:处理过的报告不允许取消),用2表示其状态;

3,处理过的报告:取其实际的处理状态。

 

我最终使用的sql:

SELECT a.reportId,a.reporter,a.reportTime,
(CASE WHEN c.status IS NULL AND a.cancelPerson IS NULL THEN 1
ELSE (CASE WHEN a.cancelPerson IS NOT NULL THEN 2 ELSE c.status END) END) AS reportStatus,
fixPerson, fixTime
FROM
(SELECT reportId,reporter,reportTime,cancelPerson,cancelTime FROM t_report) AS a
LEFT JOIN
(SELECT reportId,MAX(fixId) AS fixId FROM t_fixReport GROUP BY reportId) AS b
ON a.reportId= b.reportId
LEFT JOIN
(SELECT fixId, STATUS, fixPerson, fixTime FROM t_fixReport ) AS c
ON b.fixId = c.fixId

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值