SQL Server 2012:为公共行ID在单个列中返回多个字符串
我使用的是SQL Server 2012 Express(T-SQL),我有一个表(AwardsPlayers),其中包含以下数据。我的数据库不支持MySQL。我已经看过了,但还是没弄好 如果我创建一个函数,那么在一个4表联接中,如果我在该联接中有多个聚合列作为多个聚合列中的一列,那么该函数是否可以工作SQL Server 2012:为公共行ID在单个列中返回多个字符串,sql,coalesce,sql-server-2012-express,Sql,Coalesce,Sql Server 2012 Express,我使用的是SQL Server 2012 Express(T-SQL),我有一个表(AwardsPlayers),其中包含以下数据。我的数据库不支持MySQL。我已经看过了,但还是没弄好 如果我创建一个函数,那么在一个4表联接中,如果我在该联接中有多个聚合列作为多个聚合列中的一列,那么该函数是否可以工作 playerID awardID yearID lgID notes puckett Gold Glove 1986
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
例如,从上面的表中,查询将返回以下内容:
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
如果那一年没有奖励,奖励栏中会出现一个空白
合并不能按原样工作,因为它不返回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的贡献…我的表达式现在给出了这个(更好),但是,它返回该列中找到的所有值,无论它们是否是该玩家在该yearID中的特定值
请试试这个:
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
这是一个非常好的独立查询。然而,当我把它与我的查询的其余部分放在一起时,它会返回所有可能的奖励——而只返回分配给此人的3个奖励。我不熟悉XML路径…必须仔细阅读才能了解它的工作原理。现在已经是午夜了,我明天会检查您的其他问题。没问题。谢谢睡个好觉。如果你能解决这个问题,那很好(我很想学),但不要在这上面花费不懈的努力。一个简单的解决方法是首先查询另一个表,然后连接到该表,而不是我的AwardsLayers表。我猜不出您的表结构,您可以简单地在这里发布或直接发送给我:sswater@gmail.com