如何在不使用 XML 路径和临时变量的情况下以一个逗号分隔值获取列值
Posted
技术标签:
【中文标题】如何在不使用 XML 路径和临时变量的情况下以一个逗号分隔值获取列值【英文标题】:How to get column values in one comma separated value without using XML path and temporary variable 【发布时间】:2015-01-21 05:23:23 【问题描述】:我有一个表“城市”,其中包含如下行:
ID CityName
1 Chennai
2 Bangalore
3 Delhi
4 Mumbai
我想使用选择查询获得类似'Chennai,Bangalore,Delhi,Mumbai'
的结果。
当我在 Google 上搜索时,答案使用 XMLPATH
或临时变量。有什么方法可以在不使用这些的情况下做到这一点?
【问题讨论】:
您尚未标记 RDBMS。在 mysql 中使用 GROUP_CONCAT,在 Oracle 中使用 ListAgg,不幸的是,您需要在 Sql Server 中使用a hack,其中之一就是您似乎提到的STUFF / FOR XML PATH
。
【参考方案1】:
CREATE TABLE [dbo].[Cities](
[Id] [int] NULL,
[CityName] [varchar](50) NULL
) ON [PRIMARY]
INSERT INTO [dbo].[Cities]
([Id],[CityName])
VALUES
(1,'New York'),
(2,'Miami'),
(3,'Orlando')
GO
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' ,'') + CityName
FROM Cities
SELECT @listStr
编辑: 另请阅读这篇文章,它包含几种方法,您可以通过这些方法实现您想要的。
http://www.sqlmatters.com/Articles/Converting%20row%20values%20in%20a%20table%20to%20a%20single%20concatenated%20string.aspx
【讨论】:
是否有可能避免@listStr 变量,并从选择查询中获取值。 没有。但是,您可以将其全部“包装”在一个存储过程中,如果这有助于您做您需要的事情。 是的,您提供的链接对我帮助很大。坦克为您提供建议@Y.S以上是关于如何在不使用 XML 路径和临时变量的情况下以一个逗号分隔值获取列值的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 UINavigationController 的情况下以编程方式进入 rootViewController
如何在不使用 presentViewController 的情况下以模态方式呈现自定义视图?
如何在不使用 HTML 表单的情况下以编程方式将 POST 请求发送到 JSF 页面?
如何在不重新启动 Web 应用程序的情况下以编程方式使 JavaScript 和 CSS 包无效或刷新?