我交叉查询都没做过,大家帮我看一下啊,这个SQL怎么弄呢,我试了好久,也没做出来啊.(表结构和数据如下)
--基本表: 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 伊朗')
我要的结果是:
我试了好久,也没做出来啊,大家帮我啊
A组 B组
2005-2-9 韩国 2-0 科威特 日本 2-1 朝鲜
2005-3-25 沙特 2-0 韩国 伊朗 2-1 日本
2005-3-30 韩国 2-1 乌兹 朝鲜 0-2 伊朗
问题点数:60、回复次数:5Top
1 楼zjcxc(邹建)回复于 2005-04-02 11:42:19 得分 50
--基本表: 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 伊朗')
go
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'',''-'')')
go
drop 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 伊朗
--*/Top
2 楼xluzhong(Ralph)回复于 2005-04-02 11:58:57 得分 10
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'',''-'')')
Top
3 楼badliao()回复于 2005-04-02 13:30:34 得分 0
老大,我按了你的方法试了一下,可以啊,但有个问题是,我如果加了一条记录,它怎么会列出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 伊朗
这里面的第二行不是我想要的呀
Top
4 楼zjcxc(邹建)回复于 2005-04-02 14:09:10 得分 0
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'',''-'')')Top
5 楼badliao()回复于 2005-04-02 15:38:07 得分 0
谢谢老大!Top




