2014-02-07 33 views
1

我正在使用SQL Server 2012 Express(T-SQL),并且在此表中包含以下数据(AwardsPlayers)。我的数据库不支持MySQL。我看过herehere,但我仍然无法理解。SQL Server 2012:为单个列返回一个列中的多个字符串ID

如果我创建了一个函数,它是否可以在一个4表连接中工作,我有多个聚合列作为该连接中只有一列的多列?

playerID   awardID   yearID lgID notes 
puckett   Gold Glove   1986 AL OF 
puckett   Silver Slugger  1986 AL OF 
puckett   TSN All-Star  1986 AL OF 
puckett   Gold Glove   1987 AL OF 
puckett   Silver Slugger  1987 AL OF 
puckett   TSN All-Star  1987 AL OF 
puckett   Gold Glove   1988 AL OF 

我有一个更大的加盟我使用的,但是从这个表我希望能够返回查询每个playerID和yearID对应于当年awardID。

例如从上面的查询表会返回此:

playerID  yearID     Awards 
puckett  1986  Gold Glove, Silver Slugger, TSN All-Star 
puckett  1987  Gold Glove, Silver Slugger, TSN All-Star 
puckett  1988  Gold Glove 

而在颁奖的空栏,应该有当年没有奖励。

Coalesce不能按原样工作,因为它不是返回INT,而是不能使用VARCHAR类型。

我目前的查询:

--Player Stat Cards, along with Awards, Salary 
select 
m.namefirst, 
m.namelast, 
b.yearID, 
b.yearID-m.birthyear as Age, 
b.G,b.AB,b.R,b.H,b.[2B],b.[3B],b.HR,b.RBI,b.SB,b.BB,b.SO,left(round((b.h*1.000/b.ab),3),5) as Average 
,b.IBB,b.HBP,b.SH,b.SF,b.SF,b.GIDP 
, **COALESCE(a.awardID + ',' + '',0) +a.awardID** 
from batting b 
inner join 
[master] m on b.playerID=m.playerID 
inner join 
AwardsPlayers a 
on m.playerID=a.playerID 
inner join Salaries s 
on m.playerID=s.playerID 
where m.playerID = 'puckett' 
group by 
m.namefirst, 
m.namelast, 
b.yearID, 
b.yearID-m.birthyear, 
b.G,b.AB,b.R,b.H,b.[2B],b.[3B],b.HR,b.RBI,b.SB,b.BB,b.SO,left(round((b.h*1.000/b.ab),3),5) 
,b.IBB,b.HBP,b.SH,b.SF,b.SF,b.GIDP, **COALESCE(a.awardID + ',' + '',0) +a.awardID** 

在此先感谢。

通过增加Sswater Shi的贡献......我的表情现在给出了这个(好得多),但是,它返回在该列中找到的所有值,而不管它们是否是该玩家对该年份ID的特定值。

enter image description here

+0

我不能猜测出你的表结构,你能张贴在这里简要或直接给我:[email protected] –

回答

0

请试试这个:

SELECT  playerID, yearID, awards = STUFF(
     (select ',' + [awardID] from AwardsPlayers t 
     where playerID = AwardsPlayers.playerID 
        and yearID = AwardsPlayers.yearID 
         for xml path('')) , 1 , 1 , '') 
FROM   AwardsPlayers 
GROUP BY playerID, yearID 
+0

这个作为一个独立的工作太棒了独立查询。但是,当我将其与查询的其余部分放在一起时,它将返回所有可能的奖励 - 而不是仅分配给该人员的3个奖励。 我不熟悉XML路径...将不得不阅读,看看如何工作。 – Paul

+0

现在是午夜,明天我会检查你的其他问题。 –

+0

没问题。谢谢。睡得安稳。 – Paul

相关问题