create table A(QID int,Level char(1))
goinsert into A values(1,   'A')
insert into A values(2,   'B')
insert into A values(3,   'C')
insert into A values(4,   'D')
gocreate table B(ID int, WriteDate datetime ,QID int)
go
insert into B values(1,  '2006-1-10', 1)
insert into B values(2,  '2006-1-3',  1)
insert into B values(3,  '2006-1-5',  2)
insert into B values(4,  '2006-1-15', 3)
godeclare @sql varchar(2000)
set @sql='select B.ID,B.WriteDate,'select @sql=@sql+'(case Level when '''+Level+''' then ''√'' else '''' end) as '+ Level+','
from A,B 
where A.QID=B.QIDset @sql=stuff(@sql,len(@sql),1,'')
set @sql=@sql+' from A,B where A.QID=B.QID'exec(@sql)

解决方案 »

  1.   

    楼上的好 我菜不理解
    case Level when '''+Level+''' then ''√'' else '''' end) as '+ Level+',请教哪里找点这样的资料看看 谢谢
     select B.ID,B.WriteDate,
           A=case B.QID when 1 then '√' else '' end,
           B=case B.QID when 2 then '√' else '' end,
           C=case B.QID when 3 then '√' else '' end,
           D=case B.QID when 4 then '√' else '' end
           .......
    from A,B
    where A.QID=B.QID
      

  2.   

    SQL Server联机帮助中,索引页输入caseCASE
    计算条件列表并返回多个可能结果表达式之一。 CASE 具有两种格式: 简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。 
    CASE 搜索函数计算一组布尔表达式以确定结果。 
    两种格式都支持可选的 ELSE 参数
      

  3.   

    因为Level里的项不确定,我那个是把Level里的项都取出来,生成一个动态SQL
      

  4.   

    to:lw1a2(一刀 Blog:http://spaces.msn.com/members/lw1a2/) 
    你的方法不错,但还有个问题能解释一下吗?
    你用动态生成SQL语句的方法,在上面的数据中得出下面的SQL:
    select B.ID,B.WriteDate,(case Level when 'A' then '√' else '' end) as A,(case Level when 'A' then '√' else '' end) as A,(case Level when 'B' then '√' else '' end) as B,(case Level when 'C' then '√' else '' end) as C from A,B where A.QID=B.QID才四条记录就生成了这么长的语句,我的数据表中有1000条,在我的环境中测试的时候出现了以下的问题:
    select B.ID,B.WriteDate,(case Level when 'A' then '√' else '' end) as A,(case Level when 'A' then '√' else '' end) as A,(case Level when 'B' then '√' else '' end) as B,(case Level when 'C' then '√' else '' end) as C,(c因为太长,SQL语句被自动截断了,数据库提示:第 1 行: 'c' 附近有语法错误。
    请问你是如果解决这样的问题的?
    注:我已经将declare @sql varchar(2000) 改成 declare @sql varchar(8000)
      

  5.   

    看看这个吧:http://blog.csdn.net/zjcxc/archive/2003/12/29/20075.aspx