--基本表:  Groupinfo  
create table Groupinfo(groupid int,groupname nvarchar(20))
insert into Groupinfo values(1,'A组')
insert into Groupinfo values(2,'B组')--赛况表:  Match
create table Match(groupid int,date datetime,score nvarchar(20))
insert into Match values(1,'2005-2-9','韩国 2-0 科威特')
insert into Match values(1,'2005-3-25','沙特 2-0 韩国')
insert into Match values(1,'2005-3-30','韩国 2-1 乌兹')
insert into Match values(2,'2005-2-9','日本 2-1 朝鲜')
insert into Match values(2,'2005-3-25','伊朗 2-1 日本')
insert into Match values(2,'2005-3-30','朝鲜 0-2 伊朗')
godeclare @s nvarchar(4000)
set @s=''
select @s=@s+','+quotename(groupname)+'=max(case groupid when '+rtrim(groupid)+' then score end)'
from Groupinfo
exec('select replace(convert(char(10),date,120),''-0'',''-'')'+@s+'
from Match group by replace(convert(char(10),date,120),''-0'',''-'')')
godrop table Groupinfo,Match/*--结果
                      A组                      B组
--------------------- ------------------------ ------------------
2005-2-9              韩国 2-0 科威特           日本 2-1 朝鲜
2005-3-25             沙特 2-0 韩国             伊朗 2-1 日本
2005-3-30             韩国 2-1 乌兹             朝鲜 0-2 伊朗
--*/

解决方案 »

  1.   

    declare @s nvarchar(4000)
    set @s=''
    select @s=@s+','+quotename(groupname)+'=max(case groupid when '+rtrim(groupid)+' then score end)'
    from Groupinfo
    exec('select replace(convert(char(10),date,120),''-0'',''-'')'+@s+'
    from Match group by replace(convert(char(10),date,120),''-0'',''-'')')
      

  2.   

    老大,我按了你的方法试了一下,可以啊,但有个问题是,我如果加了一条记录,它怎么会列出null的行来,它是按date来group by的吗,肯定是这里出了点小问题吧
    --基本表:  Groupinfo  
    create table Groupinfo(groupid int,groupname nvarchar(20))
    insert into Groupinfo values(1,'A组')
    insert into Groupinfo values(2,'B组')
    --后面这条是新加的
    insert into Groupinfo values(3,'C组')--赛况表:  Match
    create table Match(groupid int,date datetime,score nvarchar(20))
    insert into Match values(1,'2005-2-9','韩国 2-0 科威特')
    insert into Match values(1,'2005-3-25','沙特 2-0 韩国')
    insert into Match values(1,'2005-3-30','韩国 2-1 乌兹')
    insert into Match values(2,'2005-2-9','日本 2-1 朝鲜')
    insert into Match values(2,'2005-3-25','伊朗 2-1 日本')
    insert into Match values(2,'2005-3-30','朝鲜 0-2 伊朗')
    --后面这条是新加的
    insert into Match values(3,'2005-3-10','朝鲜 0-1 伊朗')
    我运行的脚本:declare @s nvarchar(4000)
    set @s=''
    select @s=@s+','+quotename(groupname)+'=max(case groupid when '+rtrim(groupid)+' then score end)'
    from Groupinfo where groupid in ('1','2') 
    --其中加了 选择1,2两组的条件
    exec('select replace(convert(char(10),date,120),''-0'',''-'')'+@s+'
    from Match group by replace(convert(char(10),date,120),''-0'',''-'')')其我运行后变成:
     
                    A                B
     2005-2-9   韩国 2-0 科威特   日本 2-1 朝鲜
     2005-3-10   null               null
     2005-3-25   沙特 2-0 韩国     伊朗 2-1 日本
     2005-3-30   韩国 2-1 乌兹     朝鲜 0-2 伊朗这里面的第二行不是我想要的呀
      

  3.   

    declare @s nvarchar(4000)
    set @s=''
    select @s=@s+','+quotename(groupname)+'=max(case groupid when '+rtrim(groupid)+' then score end)'
    from Groupinfo where groupid in ('1','2') 
    --其中加了 选择1,2两组的条件
    exec('select replace(convert(char(10),date,120),''-0'',''-'')'+@s+'
    from Match 
    where groupid in (''1'',''2'')   --***这里也要加条件"选择1,2两组的条件"
    group by replace(convert(char(10),date,120),''-0'',''-'')')