SQL server 求一个sql,看似简单哟

电灯泡 2014-11-12 04:33:11
tableA
id pass
1 y
2 n
3 n
3 y
3 y

求pass等于y时id所对应的数量
结果集:
id total
1 1
2 0
3 2
...全文
228 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
电灯泡 2014-11-16
  • 打赏
  • 举报
回复
引用 7 楼 roy_88 的回复:
这样用group by all
use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#tableA') is null
	drop table #tableA
Go
Create table #tableA([id] int,[pass] nvarchar(1))
Insert #tableA
select 1,N'y' union all
select 2,N'n' union all
select 3,N'n' union all
select 3,N'y' union all
select 3,N'y'
Go
Select [id],COUNT(1) AS  total  from #tableA WHERE [pass]='y' GROUP BY ALL [id]
/*
id	total
1	1
2	0
3	2
*/
艾玛,太cool了
Tiger_Zhao 2014-11-14
  • 打赏
  • 举报
回复
引用 7 楼 roy_88 的回复:
这样用group by all

Trouble___Maker 2014-11-13
  • 打赏
  • 举报
回复
with
tb(id,pass) as
(
    SELECT 1,'y' UNION ALL
	SELECT 2,'n' UNION ALL
	SELECT 3,'n' UNION ALL
	SELECT 3,'y' UNION ALL
	SELECT 3,'y'
)

SELECT id, SUM(CASE pass WHEN 'y' THEN 1 ELSE 0 END) AS COUNT FROM tb GROUP BY id
中国风 2014-11-13
  • 打赏
  • 举报
回复
这样用group by all
use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#tableA') is null
	drop table #tableA
Go
Create table #tableA([id] int,[pass] nvarchar(1))
Insert #tableA
select 1,N'y' union all
select 2,N'n' union all
select 3,N'n' union all
select 3,N'y' union all
select 3,N'y'
Go
Select [id],COUNT(1) AS  total  from #tableA WHERE [pass]='y' GROUP BY ALL [id]
/*
id	total
1	1
2	0
3	2
*/
Tiger_Zhao 2014-11-13
  • 打赏
  • 举报
回复
数据量大的话每个明细都要做 CASE 运算不划算。
    SELECT a.id, ISNULL(b.total,0) total
FROM (SELECT DISTINCT id FROM table1) a
LEFT JOIN (
SELECT id, count(*) total
FROM table1
WHERE pass = 'y'
GROUP BY id
) b
ON b.id = a.id
还在加载中灬 2014-11-13
  • 打赏
  • 举报
回复
我也是菜鸟,多逛多练
AngleElina 2014-11-13
  • 打赏
  • 举报
回复
引用 3 楼 ky_min 的回复:
--模拟数据
;WITH tableA(id,pass)AS(
	SELECT 1,'y'
	UNION ALL SELECT 2,'n'
	UNION ALL SELECT 3,'n'
	UNION ALL SELECT 3,'y'
	UNION ALL SELECT 3,'y'
)
--查询
SELECT id,COUNT(CASE pass WHEN 'y' THEN pass END)total FROM tableA GROUP BY id
--结果
/*
1	1
2	0
3	2
*/
大神,哪里都能看到你
还在加载中灬 2014-11-12
  • 打赏
  • 举报
回复
--模拟数据
;WITH tableA(id,pass)AS(
	SELECT 1,'y'
	UNION ALL SELECT 2,'n'
	UNION ALL SELECT 3,'n'
	UNION ALL SELECT 3,'y'
	UNION ALL SELECT 3,'y'
)
--查询
SELECT id,COUNT(CASE pass WHEN 'y' THEN pass END)total FROM tableA GROUP BY id
--结果
/*
1	1
2	0
3	2
*/
电灯泡 2014-11-12
  • 打赏
  • 举报
回复
谢谢哈,我也想出来了 select id,sum(num) from (SELECT id,(case when pass='y' then 1 else 0 end) as num from table ) a GROUP BY id
chen357313771 2014-11-12
  • 打赏
  • 举报
回复
SELECT id,SUM(CASE pass WHEN 'y' THEN 1 ELSE 0 END) [total] 
FROM t
GROUP BY id

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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