【求助】SQL的统计

blackwhole 2008-11-06 05:26:11
表的内容为:
a b
=========
1 a
1 b
2 a
2 a
2 c
3 a
3 b
3 b
3 b
3 c
3 c

我想统计成这样:
1 a=1, b=1, c=0
2 a=2, b=0, c=1
3 a=1, b=2, c=2

请问用一条SQL语句可以完成么?
如果可以,该怎么样写呢?

苦恼很多天了。现在用了多个sql语句分别统计,然后再更新到一个表里的。


...全文
94 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kimi2008004 2008-11-07
  • 打赏
  • 举报
回复
HAOTIE
blackwhole 2008-11-07
  • 打赏
  • 举报
回复
谢谢大家。
可以结贴了。
bingdian37 2008-11-06
  • 打赏
  • 举报
回复
学习
中国风 2008-11-06
  • 打赏
  • 举报
回复
--> --> (Roy)生成測試數據

if not object_id('Tempdb..#T') is null
drop table #T
Go
Create table #T([a] int,[b] nvarchar(1))
Insert #T
select 1,N'a' union all
select 1,N'b' union all
select 2,N'a' union all
select 2,N'a' union all
select 2,N'c' union all
select 3,N'a' union all
select 3,N'b' union all
select 3,N'b' union all
select 3,N'b' union all
select 3,N'c' union all
select 3,N'c'
Go
declare @s nvarchar(4000)
set @s=''
select @s=@s+'+'','+[b]+'=''+rtrim(sum(case when [b]='+quotename([b],'''')+' then 1 else 0 end))' from #T group by [b]
set @s=stuff(stuff(@s,charindex(',',@s),1,''),1,1,'select [a],COl=')
exec(@s+' from #T group by [a]')


a COl
----------- --------------------------------------------
1 a=1,b=1,c=0
2 a=2,b=0,c=1
3 a=1,b=3,c=2
tiyuzhongxin789 2008-11-06
  • 打赏
  • 举报
回复
--> By dobear_0922(小熊) 2008-11-06 17:30:13
--> 测试数据:@t
declare @t table([a] int,[b] varchar(1))
insert @t
select 1,'a' union all
select 1,'b' union all
select 2,'a' union all
select 2,'a' union all
select 2,'c' union all
select 3,'a' union all
select 3,'b' union all
select 3,'b' union all
select 3,'b' union all
select 3,'c' union all
select 3,'c'

--select * from @t

select a, info='a='+ rtrim(sum(case b when 'a' then 1 else 0 end))
+ ', b=' + rtrim(sum(case b when 'b' then 1 else 0 end))
+ ', c=' + rtrim(sum(case b when 'c' then 1 else 0 end))
from @t
group by a
/*
a info
----------- ----------------------------------------------
1 a=1, b=1, c=0
2 a=2, b=0, c=1
3 a=1, b=3, c=2

(3 行受影响)
*/
等不到来世 2008-11-06
  • 打赏
  • 举报
回复
顶do熊,哈哈!
等不到来世 2008-11-06
  • 打赏
  • 举报
回复
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([id] int,[name] varchar(1))
insert [tb]
select 1,'a' union all
select 1,'b' union all
select 2,'a' union all
select 2,'a' union all
select 2,'c' union all
select 3,'a' union all
select 3,'b' union all
select 3,'b' union all
select 3,'b' union all
select 3,'c' union all
select 3,'c'

select * from [tb]

select id
,a=(select count(*) from tb where id=a.id and name='a')
,b=(select count(*) from tb where id=a.id and name='b')
,c=(select count(*) from tb where id=a.id and name='c')
from tb a
group by id

--测试结果:
/*
id a b c
----------- ----------- ----------- -----------
1 1 1 0
2 2 0 1
3 1 3 2

(3 row(s) affected)

*/
dobear_0922 2008-11-06
  • 打赏
  • 举报
回复
--> By dobear_0922(小熊) 2008-11-06 17:30:13
--> 测试数据:@t
declare @t table([a] int,[b] varchar(1))
insert @t
select 1,'a' union all
select 1,'b' union all
select 2,'a' union all
select 2,'a' union all
select 2,'c' union all
select 3,'a' union all
select 3,'b' union all
select 3,'b' union all
select 3,'b' union all
select 3,'c' union all
select 3,'c'

--select * from @t

select a, info='a='+ rtrim(sum(case b when 'a' then 1 else 0 end))
+ ', b=' + rtrim(sum(case b when 'b' then 1 else 0 end))
+ ', c=' + rtrim(sum(case b when 'c' then 1 else 0 end))
from @t
group by a
/*
a info
----------- ----------------------------------------------
1 a=1, b=1, c=0
2 a=2, b=0, c=1
3 a=1, b=3, c=2

(3 行受影响)
*/
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 《值班排班工具完整版》是一款基于Java语言打造的值班排班管理系统模块。它为值班和排班管理提供了一站式服务,包含源代码、SQL建表文件及预编译的WAR包,便于开发者迅速部署和使用。开放的源码方便用户按需定制与二次开发,而WAR包则可直接部署于支持Java Web的服务器(如Tomcat),简化上线流程。 该系统核心功能丰富:一是排班管理,能依据人员、时间、岗位等条件灵活设置排班规则,自动生成排班表,支持周期性排班、特殊日期调整、轮班制度等多种模式,确保排班公平合理;二是值班人员管理,可对值班人员信息(姓名、职位、联系方式等)进行添加、删除和修改,便于人员分配;三是值班任务分配,根据岗位需求将不同任务指派给相应值班人员,保障工作顺利开展;四是提醒与通知,设有自动提醒功能,可通过邮件、短信或应用内通知提前告知值班人员值班时间;五是报表与统计,提供值班频率统计、未值班记录分析等统计图表,助力管理层了解值班情况、优化排班策略;六是权限管理,实现管理员、员工等不同角色的权限划分,确保信息与操作安全合规;七是数据库建表文件,提供的SQL文件用于创建数据库表结构,需用户根据自身数据库环境(MySQL、Oracle等)适配导入;八是WAR包,作为Java Web应用的标准打包形式,包含运行所需全部内容,用户将其复制到Web服务器应用部署目录即可启动服务。 对于开发者,该系统极具学习价值,通过阅读源码可学习功能实现、借鉴架构设计与编码规范。对需快速搭建值班管理系统的组织而言,它是理想起点,无需从零开发。使用中遇问题,用户可留言求助或参考作者博客教程,作者提供技术支持与交流平台,提升系统可信赖度与用户友好性。总之,这款工具是集Java技术优势于一体的全面、易用的值班管理与排班优化解决方案,开发者与使用者均

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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