2011-03-06 91 views
3

我是StackOverflow的新手,刚接触SQL Server时,希望您能帮我解决一些麻烦的问题。SQL查询问题

这是我的数据库结构(它的一半西班牙语,希望无所谓)

Database

我的问题是,我不知道现在该怎么做一个查询,状态哪支球队是局部的,这是访问者(使用表TMatch,知道球场仅属于一个团队)

这是据我可以得到

Select P.NroMatch, (select * from fnTeam (P.TeamA)) as TeamA,(select * from fnTeam (P.TeamB)) as TeamB, 
    (select * from fnEstadium (P.CodEstadium)) as Estadium, (cast(P.GolesTeamA as varchar)) + '-' + (cast(P.GolesTeamA as varchar)) as Score, 
    P.Fecha 
from TMatch P 

使用此功能:

If object_id ('fnTeam','fn')is not null 
drop function fnTeam 
go 
create function fnTeam(@CodTeam varchar(5)) 
returns table 

return(Select Name from TTeam where CodTeam = @CodTeam) 
go 

select * from fnTeam ('Eq001') 
go 
----**** 
If object_id ('fnEstadium','fn')is not null 
drop function fnEstadium 
go 
create function fnEstadium(@CodEstadium varchar(5)) 
returns table 

return(Select Name from TEstadium where CodEstadium = @CodEstadium) 
go 

我希望我解释自己很好,我感谢你提前帮

编辑:

感谢您的帮助,这是我一直寻找

Select P.NroMatch, 
CASE 
    WHEN Ts.CodTeam= Ta.CodTeamTHEN Ta.Name 
    ELSE Tb.Name 
END 
As TeamLocal, 
CASE 
    WHEN Ts.CodTeam<> Ta.CodTeamTHEN Ta.Name 
    ELSE Tb.Name 
END 
As TeamVisitante, 
Ts.Name as Estadium, 
(cast(P.GolesTeamA as varchar)) + '-' + (cast(P.GolesTeamB as varchar)) as Score,  
P.Fecha 
from 
    TMatch P 
    join TTeamTa ON Ta.CodTeam= P.TeamA 
    join TTeamTb ON Tb.CodTeam= P.TeamB 
    join TEstadium Ts ON Ts.CodEstadium = P.CodEstadium 

回答

4

你并不需要使用“查找”功能,这个(也不应该),加入是一个更好的办法:

Select 
P.NroMatch, 
Ta.Name as TeamA, 
Tb.Name as TeamB,  
Ts.Name as Estadium, 
cast(P.GolesTeamA as varchar)) + '-' + (cast(P.GolesTeamA as varchar) as Score,  
P.Fecha, 
CASE 
    WHEN Ts.CodTeam = Ta.Name THEN Ta.Name 
    ELSE Tb.Name 
END As HomeTeam, 
CASE 
    WHEN Ts.CodTeam <> Ta.Name THEN Ta.Name 
    ELSE Tb.Name 
END As VistorTeam 
from 
    TMatch P 
    join TTeam Ta ON Ta.CodTeam = P.TeamA 
    join TTeam Tb ON Tb.CodTeam = P.TeamB 
    join TEstadium Ts ON Ts.CodEstadium = P.CodEstadium 

如果你是新的SQL,它可能对某些资源,比如这些所谓搜索有用:

SQL Tutorial

SQL Tutorial

+0

对不起,该datasabase是在链路(他们不”让新用户发布图片)。另外,如果TeamA和TeamB在TeamA体育场比赛,teamA是当地的 – brisonela 2011-03-06 23:59:33

+0

抱歉,因为这么激烈,但问题在于“访客” – brisonela 2011-03-07 00:25:20

+0

@Brisonela:我不知道你的意思? – 2011-03-07 00:27:19