如果你想有一个动态的方式:
样本数据
create table MyTable(
name varchar(20),
country varchar(20),
state varchar(20)
)
insert into MyTable values
('ana', 'usa', 'ca'),
('paul', 'usa', 'wy'),
('louis', 'can', 'ot'),
('ana', 'usa', 'ca'),
('john', 'can', 'al'),
('paul', 'usa', 'wy'),
('john', 'usa', 'ca'),
('ana', 'usa', 'ca'),
('louis', 'can', 'ot');
解决方案使用CROSSTAB
declare @sql1 as varchar(4000) = ''
declare @sql2 as varchar(4000) = ''
declare @sql3 as varchar(4000) = ''
select @sql1 =
'select
country
,state
'
select @sql2 = @sql2 +
' ,sum(case when name = ''' + name + ''' then 1 else 0 end) as [' + name + ']' + char(10)
from (
select distinct name from MyTable
)t
order by name
select @sql3 =
'from MyTable
group by country, state
order by country, state desc
'
print (@sql1 + @sql2 + @sql3)
exec (@sql1 + @sql2 + @sql3)
基于您的问题的动态词可能是** @ wewesthemenace **的答案是一个更好的答案 – Rajesh 2014-12-02 04:10:47