我有这样的疑问,
select StateName ,countryName
from country_master left join state_master on country_master.countryID = state_master.countryID产生以下结果,
印度
古吉拉特邦
德里印度
人力资源部印度
MP /印度
NY美国
美国.
芝加哥美国
WDC美国
伦敦英国
我想把这个结果和它的关系放在一起,
印度-古吉拉特邦高级人力资源管理计划
美国-纽约,洛杉矶,芝加哥,英国-伦敦
对构建这个查询有什么想法吗?
建议我,谢谢,
发布于 2011-11-14 10:54:28
这个问题本质上是Concatenate many rows into a single text string?的重复。
下面是在Server 2008中工作的一种方法:
WITH Ranked ( countryID, rnk, stateName )
AS ( SELECT countryID,
ROW_NUMBER() OVER( PARTITION BY countryID ORDER BY countryID ),
CAST( stateName AS VARCHAR(8000) )
FROM state_master),
AnchorRanked ( countryID, rnk, stateName )
AS ( SELECT countryID, rnk, stateName
FROM Ranked
WHERE rnk = 1 ),
RecurRanked ( countryID, rnk, stateName )
AS ( SELECT countryID, rnk, stateName
FROM AnchorRanked
UNION ALL
SELECT Ranked.countryID, Ranked.rnk,
RecurRanked.stateName + ', ' + Ranked.stateName
FROM Ranked
INNER JOIN RecurRanked
ON Ranked.countryID = RecurRanked.countryID
AND Ranked.rnk = RecurRanked.rnk + 1 )
SELECT countryName, MAX( stateName )
FROM RecurRanked
INNER JOIN country_master on RecurRanked.countryID = country_master.countryID
GROUP BY countryName;您可以在这里看到几种实现这种技术的方法:https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/
如果连在一起的城市列表将超过8000个字符,您将需要小心,但是如果需要考虑的话,您可能可以不执行varchar(max)之类的操作(除了这可能不是查看数据的一个非常好的方法)。
发布于 2011-11-14 12:41:05
Select t.countryName , isnull(Stuff((SELECT ', ' + StateName
FROM state_master where countryID = t.countryID
ORDER BY StateName
For XML PATH ('')),1,1,''),'') as c
from country_master t 发布于 2011-11-14 12:45:53
select c.countryName,
stuff((select ' '+s.StateName
from state_master as s
where s.countryID = c.countryID
for xml path(''), type).value('.', 'nvarchar(max)'), 1, 1, '')
from country_master as chttps://stackoverflow.com/questions/7859540
复制相似问题