Mar*_*ham 19 sql sql-server sql-server-2008
我必须仅使用符合某些条件的记录从表中提取整数ID列表.例如:
Select ProdID From Products Where (ProdType='XYZ');
Run Code Online (Sandbox Code Playgroud)
问题是我必须将它作为一组逗号分隔值返回,以便我可以使用它来选择多选列表中的项目:
111,231,554,112
Run Code Online (Sandbox Code Playgroud)
而不是记录.我不想在我的C#代码中执行此操作 - 我希望通过这种方式通过查询直接从数据库中获取.有任何想法吗?
OMG*_*ies 18
SELECT GROUP_CONCAT(t.prodid SEPARATOR ',')
FROM PRODUCTS t
WHERE t.prodtype = 'XYZ'
Run Code Online (Sandbox Code Playgroud)
Tim Hall网站上提供了可用的字符串聚合技术的完美摘要.
SELECT STUFF((SELECT ','+ t.prodid
FROM PRODUCTS t
WHERE t.prodtype = 'XYZ'
FOR XML PATH('')), 1, 1, '')
Run Code Online (Sandbox Code Playgroud)
Jus*_*ner 18
除了@OMG Ponies方法,你还可以尝试这个COALESCE技巧:
declare @string nvarchar(255)
select @string = coalesce(@string + ', ', '') + cast(prodid as nvarchar(5))
from products
Run Code Online (Sandbox Code Playgroud)
从 SQL Server 2017 开始,您现在可以使用STRING_AGG函数。
这允许您从 SELECT 语句中创建逗号分隔的列表(因此可以很好地与视图配合使用)。鉴于您的示例,它将变为:
SELECT STRING_AGG(ProdID, ',') FROM Products WHERE (ProdType='XYZ');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27429 次 |
| 最近记录: |