求一条复杂sql

tt661998 2013-07-25 11:17:42
需求 每个银行的前台 一共服务多少次 好评多少次 一般多少次 差评多少次
姓名 服务次数 好评 一般 差评
AA 200 100 50 50

这个sql 用一条怎么做到啊?
...全文
135 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

create table #USER (id int,name nvarchar(10))
insert into #USER values(1,'张三')
insert into #USER values(2,'李四')

create table #Assess (id int , Aname nvarchar(10))
insert into #Assess values(1,'好评')
insert into #Assess values(2,'一般')
insert into #Assess values(3,'差评')

create table #UANDA ([uid] int,aid int)
insert into #UANDA values (1,1)
insert into #UANDA values (1,2)
insert into #UANDA values (1,1)
insert into #UANDA values (1,3)
insert into #UANDA values (2,1)
insert into #UANDA values (2,1)
insert into #UANDA values (2,3)

select u.name,
	服务次数=(select COUNT(1) from #UANDA where uid=u.id),
	好评次数=(select COUNT(1) from #UANDA where uid=u.id and aid=1),
	一般次数=(select COUNT(1) from #UANDA where uid=u.id and aid=2),
	差次数=(select COUNT(1) from #UANDA where uid=u.id and aid=3)
from #USER u
	INNER JOIN #UANDA ua
	ON u.id=ua.uid
	INNER JOIN #Assess a
	on ua.aid=a.id
group by u.name,u.id

  • 打赏
  • 举报
回复
根据表结构SQL语句会不同 最好发表结构
wanglingzhong 2013-07-25
  • 打赏
  • 举报
回复
引用 1 楼 wanglingzhong 的回复:
楼主没有说你的原始表结构哦 猜测是行转列问题 你这个直接按人员分组,count(1)得到服务次数,然后使用case when 分别得到好评、差评等的次数即可
譬如得到好评次数,使用sum(case when 评价结果='好评' then 1 else 0)
wanglingzhong 2013-07-25
  • 打赏
  • 举报
回复
譬如好评次数,sum(case when 评价结果=‘好评' then 1 else 0 end)
wanglingzhong 2013-07-25
  • 打赏
  • 举报
回复
楼主没有说你的原始表结构哦 猜测是行转列问题 你这个直接按人员分组,count(1)得到服务次数,然后使用case when 分别得到好评、差评等的次数即可

22,209

社区成员

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

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