日期:2014-05-18 浏览次数:20607 次
select 客户名称, [2005]=max(case when 日期=2005 then 'yes' else 'no' end), [2006]=max(case when 日期=2006 then 'yes' else 'no' end), [2007]=max(case when 日期=2007 then 'yes' else 'no' end), ...... from tb group by 客户名称
------解决方案--------------------
declare @sql varchar(8000) set @sql = 'select 客户名称 ' select @sql = @sql + ' , max(case 日期 when ''' + 日期 + ''' then ''''yes'''' else ''no'' end) [' + 日期 + ']' from (select distinct 日期 from tb) as a set @sql = @sql + ' from tb group by 客户名称' exec(@sql)
------解决方案--------------------
--测试表 测试数据 create table tab_b ( 展览名称 varchar(30), 客户名称 varchar(30), 日期 varchar(30) ) insert into tab_b select '展览1','客户A','2008' union all select '展览2','客户A','2008' union all select '展览1','客户A','2009' union all select '展览3','客户A','2010' union all select '展览4','客户B','2011' union all select '展览5','客户B','2008' union all select '展览6','客户B','2008' union all select '展览7','客户B','2009' union all select '展览8','客户B','2010' union all select '展览9','客户B','2011' --查询--把以下代码放入一个循环内 动态给变量@year值就行了 declare @year varchar(30),@i int select @year='2010' select @i=count(*) from tab_b where 日期=@year select 客户名称, case when @i>0 then 'yes' else 'no' end as 是否流失 from tab_b where 日期 = @year
------解决方案--------------------
declare @sql varchar(8000)
set @sql = 'select 客户名称 '
select @sql = @sql + ' , max(case 日期 when ''' + 日期 + ''' then ''''yes'''' else ''no'' end) [' + 日期 + ']'
from (select distinct 日期 from tb) as a
set @sql = @sql + ' from tb group by 客户名称'
exec(@sql)
------解决方案--------------------
create table tb ( 展览名称 varchar(30), 客户名称 varchar(30), 日期 varchar(30) ) insert into tb select '展览1','客户A','2008' union all select '展览2','客户A','2008' union all select '展览1','客户A','2009' union all select '展览3','客户A','2010' union all select '展览4','客户B','2011' union all select '展览5','客户B','2008' union all select '展览6','客户B','2008' union all select '展览7','客户B','2009' union all select '展览8','客户B','2010' union all select '展览9','客户B','2011' go declare @sql varchar(8000) set @sql = 'select 客户名称 ' select @sql = @sql + ' , max(case 日期 when ''' + 日期 + ''' then ''yes'' else ''no'' end) [' + 日期 + ']' from (select distinct 日期 from tb) as a set @sql = @sql + ' from tb group by 客户名称' exec(@sql) /* 客户名称 2008 2009 2010 2011 ------------------------------ ---- ---- ---- ---- 客户A yes yes yes no 客户B yes yes yes yes */ drop table tb