在sql server中包装具有相同id的相同列

在sql server中包装具有相同id的相同列,sql,sql-server,syntax,Sql,Sql Server,Syntax,我想包装具有两条不同消息的列,它们具有相同的queueID,并且不应该在messages列上硬编码 这是我的桌子: CREATE TABLE [dbo].[test] ( [id] [int] IDENTITY(1,1) NOT NULL, [queueID] [int] NULL, [messages] [nvarchar](50) NULL, [firstname] [nvarchar](20) NULL, [secondname] [nvarchar](

我想包装具有两条不同消息的列,它们具有相同的queueID,并且不应该在messages列上硬编码

这是我的桌子:

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
试试这个

 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

如果这是SQL Server,则无法执行组\u 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];

可能的重复首先,您需要一些东西来对每个
queueID
中的记录进行排序。你怎么知道“错误消息”是在“连接失败”之后而不是之前出现的?它不应该与相同的消息和不同的队列连接起来。谢谢你的尝试。如我所料,得到了答案