首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以单行方式显示结果数据,无论是否。在Sql server中的列。

以单行方式显示结果数据,无论是否。在Sql server中的列。
EN

Stack Overflow用户
提问于 2011-10-22 12:31:31
回答 3查看 1.4K关注 0票数 0

我有这样的疑问,

代码语言:javascript
运行
复制
select StateName ,countryName
from country_master left join state_master on country_master.countryID = state_master.countryID

产生以下结果,

印度

古吉拉特邦

德里印度

人力资源部印度

MP /印度

NY美国

美国.

芝加哥美国

WDC美国

伦敦英国

我想把这个结果和它的关系放在一起,

印度-古吉拉特邦高级人力资源管理计划

美国-纽约,洛杉矶,芝加哥,英国-伦敦

对构建这个查询有什么想法吗?

建议我,谢谢,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-14 10:54:28

这个问题本质上是Concatenate many rows into a single text string?的重复。

下面是在Server 2008中工作的一种方法:

代码语言:javascript
运行
复制
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)之类的操作(除了这可能不是查看数据的一个非常好的方法)。

票数 2
EN

Stack Overflow用户

发布于 2011-11-14 12:41:05

代码语言:javascript
运行
复制
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 
票数 0
EN

Stack Overflow用户

发布于 2011-11-14 12:45:53

代码语言:javascript
运行
复制
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 c
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7859540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档