求一条复杂sql
需求 每个银行的前台 一共服务多少次 好评多少次 一般多少次 差评多少次
姓名 服务次数 好评 一般 差评
AA 200 100 50 50
这个sql 用一条怎么做到啊? SQL
[解决办法]
楼主没有说你的原始表结构哦
猜测是行转列问题
你这个直接按人员分组,count(1)得到服务次数,然后使用case when 分别得到好评、差评等的次数即可
[解决办法]
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