关于CASE WHEN的多条件汇总问题

morliz子轩 2017-08-18 01:39:35

--创建测试表
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 * FROM TB1



要求输入结果如图:


请教怎么处理多条件的汇总.谢谢
...全文
2050 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
九里香 2020-07-08
  • 打赏
  • 举报
回复
要给楼主提问格式再次点个赞,我翻阅了很多帖子。这个一目了然,跟我的问题一样
morliz子轩 2017-08-18
  • 打赏
  • 举报
回复
谢谢2位大神...
OwenZeng_DBA 2017-08-18
  • 打赏
  • 举报
回复
引用 楼主 morliz 的回复:

--创建测试表
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 * FROM TB1



要求输入结果如图:


请教怎么处理多条件的汇总.谢谢
SELECT 卡状态 ,COUNT(卡类型) AS 总数, SUM  (CASE  卡类型 WHEN '正式卡' THEN 1 ELSE 0 end) AS '正式卡' ,
SUM (CASE 卡类型 WHEN '临式卡' THEN 1 ELSE 0 end) AS '临式卡'
FROM TB1
GROUP BY 卡状态
要这样的吗
二月十六 版主 2017-08-18
  • 打赏
  • 举报
回复
楼主这个提问的格式非常赞,测试表结构和填充数据语句都有,基于测试数据的结果也都很清楚
二月十六 版主 2017-08-18
  • 打赏
  • 举报
回复
SELECT  卡状态 + '数' ,
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 卡状态


34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧