【问题标题】:How to put sql result into single cell如何将sql结果放入单个单元格
【发布时间】:2017-03-30 07:54:54
【问题描述】:

我在一个简化的平台上编写 sql,无法访问平台代码,所以我需要时不时地采取一些解决方法(并不总是最佳实践代码)。

我需要将 select 子句的结果存储到单个单元格中以供进一步使用。

例如: 表产品有productID, productName, packages

表变体有productID, packageID

变体示例数据:

productID - packageID
1001 - K1001
1001 - K1002
1001 - K1003

我需要将结果以 (K1001, K1002, K1003) 或类似的形式保存到单元包中。

这可能只使用sql吗?

我使用的是 ms sql server xpress,平台/RDBMS 是自定义编码的,并不广为人知。

【问题讨论】:

  • 您使用的是哪个数据库?例如。 MySQL、SQL Server 等
  • 是的,您的 RDBMS 是什么?请添加该标签。
  • 您想在一个字段中存储多个值?那是一个多值字段,只有Access db平台具有多值字段结构。相信我,您不想在 SQLServer db 的一个字段中存储多个值。结果只会是一串文本,而不是离散的数据单元,会给你带来各种痛苦。
  • 文本字符串正是我所需要的,因为它仅用于查看和打印 - 数据始终通过原始来源进行编辑。

标签: sql sql-server string-aggregation


【解决方案1】:

您可以将STUFFFOR 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;

Find demo here

【讨论】:

  • 哇你们真快。我会试试这个。谢谢!
  • 我将如何选择单个实例说 where productID=1001 ?
  • @rami :在group by 子句之前使用where 子句。
【解决方案2】:

从 SQL Server vNext 开始你可以这样做:

SELECT 
    STRING_AGG(productId + ' - ' + packageId, ',')
FROM yourTable

在以前的版本中,你要么使用 cursors/xml 破解你的方式,要么使用 CLR 聚合函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多