SQL-通过光标将w /多行字段组合为单个行中的一个字段

问题描述

| 样品表: ID产品 1勘测 1政策 1发票 2发票 2勘测 3政策 3发票 我最终想要得到的是一个带有三行的表(每个ID对应一个表),其中带有用逗号分隔的列表中的产品: ID产品 1勘测,政策,发票 2发票,调查 3政策,发票 我可以使用用户定义的标量函数来执行此操作,但是它非常慢,我认为更合适的解决方案是使用游标,但这是我需要帮助的地方     

解决方法

不确定速度与UDF或光标的关系,但是您可以尝试一下:
with T(ID,Product) as 
(
select 1,\'Survey\' union all
select 1,\'Policy\' union all
select 1,\'Invoice\' union all
select 2,\'Survey\' union all
select 3,\'Policy\' union all
select 3,\'Invoice\'
)

select
  T1.ID,stuff((select \',\'+T2.Product
         from T as T2 
         where T1.ID = T2.ID
         for xml path(\'\'),type).value(\'.\',\'nvarchar(max)\'),1,2,\'\') as Product
from T as T1
group by T1.ID
    ,可运行的示例:http://data.stackexchange.com/stackoverflow/q/101245/
DECLARE @tbl AS TABLE (ID int,Product VARCHAR(50))

INSERT INTO @tbl VALUES (
 1,\'Survey\'),( 1,\'Policy\'),\'Invoice\'),( 2,( 3,\'Invoice\')

;WITH IDs AS (
SELECT ID
FROM @tbl
GROUP BY ID
)
SELECT IDs.ID,STUFF(Products.Products,\'\')
FROM IDs
OUTER APPLY (
SELECT \',\' + Product
FROM @tbl AS tbl
WHERE ID = IDs.ID
FOR XML PATH (\'\')
) AS Products (Products)
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...