首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请教sql语句能实现类似于数据透视表的查询吗?

2012-01-28 
请问sql语句能实现类似于数据透视表的查询吗??表结构人员品种数量甲A10甲A3甲B20乙A5乙B7乙B4要查询出结果

请问sql语句能实现类似于数据透视表的查询吗??
表结构
人员             品种           数量
甲                   A                 10
甲                   A                 3
甲                   B                 20
乙                   A                 5
乙                   B                 7
乙                   B                 4


要查询出结果
人员\品种               A                   B
甲                           13                 20
乙                             5                 11
谢谢各位了

[解决办法]
select 人员 as 人员\品种,sum(case when 品种= 'a ' then 数量 else 0 end) as a,sum(case when 品种= 'b ' then 数量 else 0 end) from tablename group by 人员
[解决办法]
select 人员 as 人员\品种,sum(case when 品种= 'A ' then 数量 end) as A,sum(case when 品种= 'B ' then 数量 end) as B from tablename group by 人员

[解决办法]
select distinct 人员 as 人员\品种,
sum(case 品种 when 'A ' then 数量 else 0 end) as A,
sum(case 品种 when 'B ' then 数量 else 0 end) as B
from tablename
group by 人员
order by 人员
[解决办法]
declare @a table(人员 char(10),品种 char(10),数量 int)
insert into @a select '甲 ', 'A ', 10 union all
select '甲 ', 'A ', 3 union all
select '甲 ', 'B ', 20 union all
select '乙 ', 'A ', 5 union all
select '乙 ', 'B ', 7 union all
select '乙 ', 'B ', 4
select 人员 as [人员\品种],sum(case when 品种= 'a ' then 数量 else 0 end) as a,sum(case when 品种= 'b ' then 数量 else 0 end)as b from @a group by 人员
result:
人员\品种 a b
---------- ----------- -----------
甲 13 20
乙 5 11

(所影响的行数为 2 行)


[解决办法]
调试通过:

select distinct 人员 as [人员\品种],
sum(case 品种 when 'A ' then 数量 else 0 end) as A,
sum(case 品种 when 'B ' then 数量 else 0 end) as B
from tablename
group by 人员
order by 人员
[解决办法]

create table T(人员 nvarchar(10), 品种 char(1), 数量 int)
insert T select '甲 ' , 'A ', 10
union all select '甲 ', 'A ', 3
union all select '甲 ', 'B ', 20


union all select '乙 ', 'A ', 5
union all select '乙 ', 'B ', 7
union all select '乙 ', 'B ', 4


declare @sql varchar(8000)
set @sql= 'select 人员, '
select @sql=@sql+quotename(品种)+ '=sum(case when 品种= '+quotename(品种, ' ' ' ')+ ' then 数量 end), ' from T group by 品种
select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from T group by 人员 '
exec(@sql)

--result
人员 A B
---------- ----------- -----------
甲 13 20
乙 5 11

热点排行