如何将 sql 结果放入单个单元格
How to put sql result into single cell
我在简化的平台中 sql 编码,无法访问平台代码,因此我时不时需要一些解决方法(并不总是最佳实践代码)。
我需要将 select 子句的结果存储到单个单元格以供进一步使用。
例如:
Table 个产品有 productID, productName, packages
.
Table 变体有 productID, packageID
.
变体的示例数据:
productID - packageID
1001 - K1001
1001 - K1002
1001 - K1003
我需要以 (K1001, K1002, K1003
) 或类似的形式将结果保存到单元格包中。
仅使用 sql 是否可以做到这一点?
我正在使用 ms sql 服务器 xpress,platform/RDBMS 是自定义编码的,并不广为人知。
您可以将 STUFF
与 FOR XML PATH
一起使用。
查询
select productID, stuff((
select ', ' + packageID
from your_table_name
where (productID = t.productID)
for xml path(''), type).value('(./text())[1]','varchar(max)')
, 1, 2, '') as single_value
from your_table_name t
group by productID;
从 SQL 服务器 vNext 开始,您可以:
SELECT
STRING_AGG(productId + ' - ' + packageId, ',')
FROM yourTable
在以前的版本中,您要么使用 cursors/xml 破解方法,要么使用 CLR 聚合函数。
我在简化的平台中 sql 编码,无法访问平台代码,因此我时不时需要一些解决方法(并不总是最佳实践代码)。
我需要将 select 子句的结果存储到单个单元格以供进一步使用。
例如:
Table 个产品有 productID, productName, packages
.
Table 变体有 productID, packageID
.
变体的示例数据:
productID - packageID
1001 - K1001
1001 - K1002
1001 - K1003
我需要以 (K1001, K1002, K1003
) 或类似的形式将结果保存到单元格包中。
仅使用 sql 是否可以做到这一点?
我正在使用 ms sql 服务器 xpress,platform/RDBMS 是自定义编码的,并不广为人知。
您可以将 STUFF
与 FOR XML PATH
一起使用。
查询
select productID, stuff((
select ', ' + packageID
from your_table_name
where (productID = t.productID)
for xml path(''), type).value('(./text())[1]','varchar(max)')
, 1, 2, '') as single_value
from your_table_name t
group by productID;
从 SQL 服务器 vNext 开始,您可以:
SELECT
STRING_AGG(productId + ' - ' + packageId, ',')
FROM yourTable
在以前的版本中,您要么使用 cursors/xml 破解方法,要么使用 CLR 聚合函数。