去评论
推扬网

李梦溪:SQL case when 语句

admin
2020/08/12 15:59:31

牛红光的回答:

求总发卡数和总制卡数和发卡正式卡数、发卡临时卡数、发卡正式卡数,制卡临时卡数、制卡正式卡数(如Excel中所示)求详细SQL语句。 --创建测试表 IF??EXISTS?(SELECT?*?FROM?sys.objects?WHERE?object_id?=?OBJECT_ID(N'[dbo].[TB]')?AND?type?in?(N'U')) DROP?TABLE?[dbo].[TB1] GO CREATE?TABLE?[dbo].[TB1]( ????[卡状态]?[nvarchar]?(20)?NULL, ????[卡类型]?[nvarchar](50)?NULL, )?ON?[PRIMARY] GO --插入测试数据 INSERT?INTO?[TB1]?([卡状态],[卡类型])? ????SELECT?N'发卡',N'正式卡'?UNION?ALL SELECT?N'发卡',N'正式卡'?UNION?ALL SELECT?N'发卡',N'临式卡'?UNION?ALL SELECT?N'制卡',N'临式卡'?UNION?ALL SELECT?N'制卡',N'正式卡' GO --静态拼接行转列(纠正简化一下) SELECT??卡状态?+?'数'?AS?卡状态, ????????COUNT(1)?AS?总数?, ????????SUM(CASE?WHEN?卡类型?=?'正式卡'?THEN?1 ?????????????????ELSE?0 ????????????END)?AS?正式卡?, ????????SUM(CASE?WHEN?卡类型?=?'临式卡'?THEN?1 ?????????????????ELSE?0 ????????????END)?AS?临式卡 FROM????TB1 GROUP?BY?卡状态 ?GO --输出结果:

欧阳林的回答:

求总发卡数和总制卡数和发卡正式卡数、发卡临时卡数、发卡正式卡数,制卡临时卡数、制卡正式卡数(如Excel中所示)求详细SQL语句。 --创建测试表 IF??EXISTS?(SELECT?*?FROM?sys.objects?WHERE?object_id?=?OBJECT_ID(N'[dbo].[TB]')?AND?type?in?(N'U')) DROP?TABLE?[dbo].[TB1] GO CREATE?TABLE?[dbo].[TB1]( ????[卡状态]?[nvarchar]?(20)?NULL, ????[卡类型]?[nvarchar](50)?NULL, )?ON?[PRIMARY] GO --插入测试数据 INSERT?INTO?[TB1]?([卡状态],[卡类型])? ????SELECT?N'发卡',N'正式卡'?UNION?ALL SELECT?N'发卡',N'正式卡'?UNION?ALL SELECT?N'发卡',N'临式卡'?UNION?ALL SELECT?N'制卡',N'临式卡'?UNION?ALL SELECT?N'制卡',N'正式卡' GO --静态拼接行转列(纠正简化一下) SELECT??卡状态?+?'数'?AS?卡状态, ????????COUNT(1)?AS?总数?, ????????SUM(CASE?WHEN?卡类型?=?'正式卡'?THEN?1 ?????????????????ELSE?0 ????????????END)?AS?正式卡?, ????????SUM(CASE?WHEN?卡类型?=?'临式卡'?THEN?1 ?????????????????ELSE?0 ????????????END)?AS?临式卡 FROM????TB1 GROUP?BY?卡状态 ?GO --输出结果:

茫茫大海的回答:

太长了,但是看到一个问题,case when,要求返回的类型必须一直。 你看你的第一个case when语句 (case when to_char(statistic_date-payrefdate>=0) and to_char(statistic_date-payrefdate<90) then sum(a.planfee-nvl(c.payreffee,0)) else &apos;&apos; end) then后边返回的是一个求和,那么类型肯定是数字,而else分支,其他情况下居然返回了空字符串,字符型。这两个不一致,首先就错了。你先改了这些吧。

查小欣的回答:

case when 就是case when 判断 case when 当满足条件 then 。。。 when ...... then ... 可以写很多种情况,直到结束