我有一个表变量@Holding
两列:id
(非唯一)和message
:
id message
---- -------
2 give
2 me
2 help
3 Need
3 help
1 help!
结果应为
2 give me help
3 Need help
1 help!
这非常简化,但表明存在可能不止一次存在的id,以及应该连接成字符串的某种文本。
我无法管理它来循环遍历这个表变量(但也不能通过表!)。
我尝试了一个游标(我没有正确理解),但当然失败了。 记录的数量并不多,在该表变量中甚至不是100。
谢谢你。救命 迈克尔
答案 0 :(得分:0)
如果您使用的是SQL Server,这应该可以使用。
<label>
My first label text
<input type="checkbox" />
</label>
<label>
My second label text
<input type="checkbox" />
</label>
答案 1 :(得分:0)
无需CURSOR,WHILE循环或用户定义的功能。
只需要对FOR XML和PATH有创意。
[注意:此解决方案仅适用于SQL 2005及更高版本。原始问题没有指定正在使用的版本。]
CREATE TABLE #YourTable ([ID] INT, [Name] CHAR(1), [Value] INT)
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'A',4)
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'B',8)
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (2,'C',9)
SELECT
[ID],
STUFF((
SELECT ', ' + [Name] + ':' + CAST([Value] AS VARCHAR(MAX))
FROM #YourTable
WHERE (ID = Results.ID)
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
,1,2,'') AS NameValues
FROM #YourTable Results
GROUP BY ID
DROP TABLE #YourTable
答案 2 :(得分:0)
相同,代码中的字母更少:
DECLARE @t AS TABLE ( id INT, msg VARCHAR(100) );
INSERT INTO @t
VALUES ( 2, 'give' );
INSERT INTO @t
VALUES ( 2, 'me' );
INSERT INTO @t
VALUES ( 2, 'help' );
INSERT INTO @t
VALUES ( 3, 'Need' );
INSERT INTO @t
VALUES ( 3, 'help' );
INSERT INTO @t
VALUES ( 1, 'help!' );
SELECT DISTINCT
id ,
(
SELECT ST1.msg + ' '
FROM @t ST1
WHERE ST1.id = ST2.id
FOR XML PATH('')
) t
FROM
@t ST2;