2014-02-07 35 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

相關問題