declare @sql varchar(8000)
set @sql=''
select @sql=@sql+',['+rtrim(Description)+']=sum(case Descriptionwhen '''+rtrim(Description)+''' then 1 else 0 end)'
from v_Table group by Description
--然后,查询
select @sql='Select Name,' +
@sql +
' From v_Table '+
' Group By Name'
-- ok query data by execute the sql command
Exec (@sql);
set @sql=''
select @sql=@sql+',['+rtrim(Description)+']=sum(case Descriptionwhen '''+rtrim(Description)+''' then 1 else 0 end)'
from v_Table group by Description
--然后,查询
select @sql='Select Name,' +
@sql +
' From v_Table '+
' Group By Name'
-- ok query data by execute the sql command
Exec (@sql);
解决方案 »
- ACCESS 中的SQL 取表B数据 到表A中
- 大家帮我看看存储过程正确与否,能否满足要求
- 各位高手请显身手啊1!如何写这样的存储过程?谢谢了先
- union all和group by怎么结合?
- ms sql中 怎样选择selec 第N条记录,在线等。。。
- 我现在想把itemno重复的去掉,但我要adjustno里面最大的一个,这个代码怎么写啊???
- 关于Insert Into ... Select的用法
- 问一个关于事务的问题:什么是绑定连接?
- asp连接sql server问题
- 关于恢复数据库的错误问题
- 请问如何利用sql server自动发邮件!急~~~!!!
- SQL手动和命令备份的备份文件大小不同,为什么?
set @s = ''
select @s = @s + ',['+Description+']=sum(case Description when '''+Description+''' then Value end)' from v_Table group by Description
set @s = 'select Name'+@s+' from v_Table group by Name'
exec(@s)
--行数据转换成列名
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+',['+rtrim(Description)+']=sum(case Description when '''+rtrim(Description)+''' then Value else 0 end)' --Value改为1即,Description when之间要分开
from v_Table group by Description
--然后,查询
select @sql='Select Name' + --,号去掉。
@sql +
' From v_Table '+
' Group By Name'
-- ok query data by execute the sql command
Exec (@sql);
-- ok
Create Table v_Table
(Name Nvarchar(20),
Description Nvarchar(200),
Value Int)
--插入数据
Insert v_Table Values('Jear', N'到厂迟到1-3小时', 5)
Insert v_Table Values('Jear', N'空柜检查', 7)
Insert v_Table Values('Jear', N'及时返回柜号', 10)
Insert v_Table Values('Jear', N'空柜检查', 3)
Insert v_Table Values(N'陈师傅',N'到厂迟到1-3小时', 5)
Insert v_Table Values(N'陈师傅',N'及时准确到达', 9)
Insert v_Table Values(N'古月历',N'到厂迟到1-3小时', 2)
Insert v_Table Values(N'古月历',N'到达码头', 5)
--测试
Declare @sql Nvarchar(4000)
Set @sql=''
Select @sql=@sql+',['+Rtrim(Description)+']=sum(case Description when N'''+Rtrim(Description)+''' then 1 Else 0 end)'
from v_Table group by Description
Select @sql='Select Name' + @sql + ' From v_Table Group By Name'
Exec (@sql);
--删除测试环境
Drop Table v_Table
--结果
/*
Name 到厂迟到1-3小时 到达码头 及时准确到达 及时返回柜号 空柜检查
Jear 1 0 0 1 2
古月历 1 1 0 0 0
陈师傅 1 0 1 0 0
*/