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

问题描述 投票:0回答:2

我想包装具有相同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
sql sql-server syntax
2个回答
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

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];
© www.soinside.com 2019 - 2024. All rights reserved.