create table FN(fullname varchar(8))
go
insert into FN
select '一分店'
union all select '二分店'
union all select '三分店'
union all select '四分店'
go
select * from fn
go
declare @sql varchar(8000)
set @sql=''
select @[email protected]+','+'sum(case when fullname='''+fullname+''' then 1 else 0 end) as '''+fullname+'''' from fn
set @sql='select fullname'[email protected]+' from fn group by fullname order by fullname'
exec(@sql)
go
drop table fn
go
(4 行受影响)
fullname
--------
一分店
二分店
三分店
四分店(4 行受影响)fullname 一分店         二分店         三分店         四分店
-------- ----------- ----------- ----------- -----------
二分店      0           1           0           0
三分店      0           0           1           0
四分店      0           0           0           1
一分店      1           0           0           0(4 行受影响)

解决方案 »

  1.   

    declare @a table(fullname nvarchar(100))insert @a select '一分店'
    union all select '二分店'
    union all select '三分店' 
    union all select '四分店' declare @sql varchar(8000)
    set @sql='create table B('
    select @[email protected]+fullname+' varchar(20),' from @a
    select @sql=left(@sql,len(@sql)-1)+')'
    exec(@sql)
      

  2.   

    --建立环境
    create table t(fullname  varchar(20))
    insert into t 
                  select    ' 一分店'
    union all select    ' 二分店'
    union all select    ' 三分店'
    union all select    ' 四分店' declare @sql varchar(8000),@i int
    select  @sql='', @i=1
    select @[email protected]+',max(case when fullname ='''+fullname+''' then  fullname  end)  as ''col'+convert(varchar(2),@i)+'''' ,@[email protected]+1 from t
    set @sql=stuff(@sql,1,1,'')
    set @sql='select '[email protected]+' from t'
    print @sqlexec (@sql)
    /*
    结果:col1                col2            col3              col4
    -------------------------------------------------------
     一分店              二分店  三分店              四分店
    */ 
      

  3.   

    declare @a table(fullname nvarchar(100))insert @a select '一分店'
    union all select '二分店'
    union all select '三分店' 
    union all select '四分店' declare @sql varchar(8000)
    set @sql='create table B('
    select @[email protected]+fullname+' varchar(20),' from @a
    select @sql=left(@sql,len(@sql)-1)+')'
    exec(@sql)
    如果分店很多,或不知道到底有几个,可否用动态SQL帮忙写一下?
      

  4.   

    declare @a table(fullname nvarchar(100))insert @a select '一分店'
    union all select '二分店'
    union all select '三分店' 
    union all select '四分店' 树上的鸟儿 这几句怎么理解? 可否写成动态SQL?
      

  5.   

    declare   @a   table(fullname   nvarchar(100)) insert   @a   select   '一分店' 
    union   all   select   '二分店' 
    union   all   select   '三分店'   
    union   all   select   '四分店'   
    =========================================
    这个就是你的表,我在这里用的是表变量,跟表一样
      

  6.   

    明白 改了一下  declare @sql varchar(8000)
    set @sql='create table B('
    select @[email protected]+fullname+' varchar(20),' from  (select distinct fullname from FN) as a
    select @sql=left(@sql,len(@sql)-1)+')'
    exec(@sql)这样就可以不限表FN有多少分店了感谢树上的鸟儿!!!
      

  7.   

    set   @sql='create   table   B(' 
    select   @[email protected]+fullname+'   varchar(20),'   from     (select   distinct   fullname   from   FN)   as   a 
    select   @sql=left(@sql,len(@sql)-1)+')' 这几句能否详解一下?谢谢!
      

  8.   

    insert into FN
    select '一分店'
    union all select '二分店'
    union all select '三分店'
    union all select '四分店'
    ---------
    是创建测试数据用的
      

  9.   

    create table fn (fullname varchar(10))
    insert fn select '一分店'   
    insert fn select '二分店'   
    insert fn select '三分店'   
    insert fn select '四分店' 
    declare @s varchar(8000)
    set @s = 'select 1'
    select @s = @s + ',['+fullname+']= max(case when fullname = '''+fullname+''' then '''' else null end) '
    from (select  fullname from fn) a
    exec (@s+' from fn')
    drop table fn 
     /*
                一分店  二分店  三分店  四分店  
    ----------- ---- ---- ---- ---- 
    1                          */
      

  10.   

    set       @sql='create       table       B('  
    select       @[email protected]+fullname+'       varchar(20),'       from           (select       distinct       fullname       from       FN)       as       a  
    select       @sql=left(@sql,len(@sql)-1)+')'  这几句能否详解一下?谢谢!
    ---------
    根据fn表中的fullname字段拼接创建表的sql语句,有多少个记录,就形成多少个相应的字段,如(最终结果):
    create table B(一分店 varchar(20),二分店 varchar(20),......)
      

  11.   

    2007年12月06日 13点29分13秒,chuifengde 给您发送的消息! 
    set   @sql='create   table   B(' --单个赋值变量
    select   @[email protected]+fullname+'   varchar(20),'   from     (select   distinct   fullname   from   FN)   as   a 
    --嵌套赋值变量
    select   @sql=left(@sql,len(@sql)-1)+')' --赋完值多一逗号去掉
    你可以在每一句后面加个print @sql,看具体的值就明白了