【发布时间】:2009-11-05 13:57:23
【问题描述】:
我有一个临时表,其中包含一个名为 Method 的字段,因此:
DECLARE @CaseSites TABLE (
BriefID int,
Method varchar(60)
-- other fields
)
方法将从另一个表中的几行填充 - CaseEventTypeList。
跑步
SELECT * FROM CaseEventTypeList WHERE RefID = 1
给予
RefID TypeID
1 2
1 3
1 6
把它变成一个逗号分隔的结果是相当简单的:
DECLARE @CETList varchar(30)
SELECT @CETList = COALESCE(@CETList + ',', '') + CAST(CETL.[TypeID] AS varchar)
FROM CaseEventTypeList CETL
WHERE CETL.RefID = 1
PRINT @CETList
给予:
2,3,6
现在我需要扩展它以容纳整个表格。这是我想出的:
UPDATE @CaseSites SET Method = COALESCE(Method + ',','') + CAST(CETL.TypeID AS VARCHAR)
FROM CaseEvents CE
JOIN CaseEventTypeList AS CETL ON CETL.RefID = CE.TypeListID
WHERE BriefID = CE.CaseID
但是,这只会用每组值中的第一个值填充 Method。
我 looked online and found this 但宁愿不使用 udf - 特别是当解决方案感觉如此接近时。
更新: 数据比较简单,RefId 每次递增,TypeID 可以是任意数字,虽然目前只建模了 1 到 8。因此,您可能有:
RefID TypeID
12 2
12 7
13 1
14 1
14 3
14 6
这有望被建模为
SELECT Method from @CaseSites
Method
...
12 2,7
13 1
14 1,3,6
...
【问题讨论】:
-
您能否举例说明数据的外观以及您希望输出的外观?我假设 RefID/TypeID 表是传入数据,但我不太确定您希望输出的外观如何。