即兴而抒

九十春光一掷梭,花前酌酒唱高歌。枝上花开能几日,世上人生能几何。 好花难种不长开,少年易过不重来。人生不向花前醉,花笑人生也是呆。 --明·唐寅 <<花下酌酒歌>>   
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

受益非浅的SQL语句

Posted on 2007-06-12 00:35  pony  阅读(144)  评论(1)    收藏  举报

Id EquipmentNo Type EspecialMark
1 ECB23232 A Mark1
2 ECB23323 B Mark2
3 ECB23545 C Mark1
4 ECB23454 C Mark3


Type A B C..............
EspecialMark
Mark1 1 1 0
Mark2 0 1 0
Mark3 0 0 1

 

create table #T(Id int,EquipmentNo varchar(10),Type char(1),EspecialMark varchar(10))
insert into #T select 1,'ECB23232','A','Mark1'
insert into #T select 2,'ECB23323','B','Mark2'
insert into #T select 3,'ECB23545','C','Mark1'
insert into #T select 4,'ECB23454','C','Mark3'
insert into #T select 5,'ECB23458','C','Mark2'
insert into #T select 5,'ECB23453','C','Mark2'
--执行动态交叉表查询
declare @s varchar(8000)
set @s = 'select Type=EspecialMark'

select @s = @s + ',['+Type+']=max(case when Type='''+Type+''' then 1 else 0 end)'
from (select distinct top 100 percent Type from #T order by Type) a
print @s
set @s = @s+' from #T group by EspecialMark order by EspecialMark'
print @s
exec(@s)

 

--输出结果
/*
Type A B C
----- --- --- ---
Mark1 1 1 0
Mark2 0 1 0
Mark3 0 0 1
*/