我想包装具有相同queueID的两个不同消息的列,并且它不应该在消息列上进行硬编码。
这是我的表:
CREATE TABLE [dbo].[test]
(
[id] [int] IDENTITY(1,1) NOT NULL,
[queueID] [int] NULL,
[messages] [nvarchar](50) NULL,
[firstname] [nvarchar](20) NULL,
[secondname] [nvarchar](20) NULL
)
表输入是:
insert into test
values (1,'Connection failed','j','s')
, (1,'Connection failed','j','s')
, (1,'Connection failed','j','s')
, (2,'Connection failed','j','s')
, (2,'Error message','j','s')
, (2,'Connection failed','j','s')
, (3,'Connection failed','j','s')
, (3,'Connection failed','j','s')
, (4,'Connection failed','j','s')
, (4,'Error message','j','s')
, (4,'third party','j','s')
, (5,'Error message','j','s')
, (5,'third party','j','s')
在上表中我的预期结果是
queueID messages
------------------------------------------------
1 Connection failed
2 Connection failed,Error message
3 Connection failed
4 Connection failed,Error message,third party
5 Error message,third party
答案 0 :(得分:0)
试试这个
select
queueID,
STUFF((select ','+ messagess From test as t2 where t2.queueID = t1.queueID FOR XML PATH('')),1,1,'')
FROM test as t1
GROUP BY queueID,messages
答案 1 :(得分:0)
如果这是SQL Server,则无法执行group_concat()。
相反,您可以使用XML功能执行相同的操作:
SELECT
id.[queueID]
,[messagess] = STUFF(
(SELECT ', ' + mess.[messagess]
FROM (SELECT [queueID], [messagess]
FROM test
GROUP BY [queueID], [messagess]) as mess -- This gets rid of duplicate messages within each queueID.
WHERE id.[queueID] = mess.[queueID]
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM
(SELECT [queueID]
FROM test
GROUP BY [queueID]) as id -- This gets your unique queueID's
ORDER BY
id.[queueID];