標準行列轉換問題
http://blog.csdn.net/talantlee/articles/353798.aspx
http://blog.csdn.net/talantlee/articles/353798.aspx
解决方案 »
- 请问如何查指定表的有没有设定主外键
- 两条sql语句如何合并
- 求助:关于使用聚合函数Max的问题
- 安装sqlserver2008express卡住了
- 求sql:如何获得相同记录行的间距
- 武汉,上海,南京 select * form table where city like '%上海%' 查询不到记录怎么办?
- 急救啊,怎么在查询的时候,判断一个表a中3条(或多条)id相同的明细数据在表a中是否有相同的3条数据
- inner join和outer join的效率探讨
- 急!求助!公司要抓几副SQLServer2000中的图片,谁有时间呀,帮忙看看!???
- 日期问题
- 两个问题,如何复制表的时候全部复制过来?
- 操作数据表的时候经常出现无法操作?
姓名,
维修=sum(case 类型 when '维修' then 1 else 0 end),
新装=sum(case 类型 when '新装' then 1 else 0 end),
好 =sum(case 评价 when '好' then 1 else 0 end),
差 =sum(case 评价 when '差' then 1 else 0 end),
一般=sum(case 评价 when '一般' then 1 else 0 end)
from
表1
group by
姓名
set @s=''
select @s=@s+','+姓名
+'=isnull(rtrim(max(case when 姓名= '
+ QUOTENAME(姓名,'''')
+' then 类型 end)),0)'from 表1 group by 姓名
exec('select 姓名'+@s+' from 表1 group by 姓名)
,sum(case 类型 when 新装 then 1 else 0 end)as 新装
,sum(case 评价 when 好 then 1 else 0 end)as 好
,sum(case 评价 when 差 then 1 else 0 end)as 差
,sum(case 评价 when 一般 then 1 else 0 end)as 一般
group by 姓名
declare @tt table(序号 int,姓名 varchar(8),类型 varchar(4),评价 varchar(4))
insert @tt values(1,'aaa','维修','好')
insert @tt values(2,'bbb','维修','差')
insert @tt values(3,'ccc','新装','好')
insert @tt values(4,'bbb','新装','好')
insert @tt values(5,'aaa','维修','一般')
select 姓名,sum(case 类型 when '维修' then 1 else 0 end)as 维修
,sum(case 类型 when '新装' then 1 else 0 end)as 新装
,sum(case 评价 when '好' then 1 else 0 end)as 好
,sum(case 评价 when '差' then 1 else 0 end)as 差
,sum(case 评价 when '一般' then 1 else 0 end)as 一般
from @tt
group by 姓名
insert #tbl values(1,'bbb','维修','差')
insert #tbl values(1,'ccc','新装','好')
insert #tbl values(1,'bbb','新装','好')
insert #tbl values(1,'aaa','维修','一般')declare @sqll varchar(4000)
declare @sql varchar(4000)
set @sql='select 姓名,'
set @sqll=''
select @sql= @sql+ '''' + a.类型 + '''=sum(case when 类型=''' + a.类型 + '''then 1 else 0 end),' from (select distinct 类型 from #tbl) aselect @sqll= @sqll + '''' + a.评价 +'''=sum(case when 评价=''' +a.评价 + ''' then 1 else 0 end),' from (select distinct 评价 from #tbl) a
select @sql=@sql+left(@sqll,len(@sqll)-1) +' from #tbl group by 姓名'
exec (@sql)--结果
姓名 维修 新装 差 好 一般
---------- ----------- ----------- ----------- ----------- -----------
aaa 2 0 0 1 1
bbb 1 1 1 1 0
ccc 0 1 0 1 0