在sql server中包装具有相同id的相同列
我想包装具有两条不同消息的列,它们具有相同的queueID,并且不应该在messages列上硬编码 这是我的桌子:在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](
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
中的记录进行排序。你怎么知道“错误消息”是在“连接失败”之后而不是之前出现的?它不应该与相同的消息和不同的队列连接起来。谢谢你的尝试。如我所料,得到了答案