Sql 行到单个单元格
我想得到用绿色标记的期望输出 每个id的数据点被放入一个单元格中 基本上,获取与发生在一起的所有事件,并按可用于XML的相同顺序附加它:Sql 行到单个单元格,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我想得到用绿色标记的期望输出 每个id的数据点被放入一个单元格中 基本上,获取与发生在一起的所有事件,并按可用于XML的相同顺序附加它: SELECT DISTINCT ID, (SELECT [EVENT] +'' FROM YourTable WHERE ID = y.ID FOR XML PATH('') ) as [EVENT] FROM Y
SELECT DISTINCT
ID,
(SELECT [EVENT] +''
FROM YourTable
WHERE ID = y.ID
FOR XML PATH('')
) as [EVENT]
FROM YourTable y
输出:
ID EVENT
1 AABCD
2 AABBCC
使用填充函数:
DECLARE @tblTest AS Table(
ID INT,
EVENT VARCHAR(5)
)
INSERT INTO @tblTest VALUES
(1,'A'),
(1,'A'),
(1,'C'),
(2,'A'),
(2,'B'),
(2,'C')
SELECT DISTINCT
T1.ID,
STUFF
(
(SELECT '' + convert(varchar(10), T2.EVENT, 120)
FROM @tblTest T2
where T1.ID = T2.ID
FOR XML PATH (''))
, 1, 0, '') AS EVENT
FROM @tblTest T1
您可以按如下方式使用UDF:
CREATE TABLE t(
id INT,
col CHAR(1)
);
INSERT INTO t VALUES (1,'a');
INSERT INTO t VALUES (1,'b');
INSERT INTO t VALUES (1,'c');
INSERT INTO t VALUES (1,'d');
INSERT INTO t VALUES (2,'e');
INSERT INTO t VALUES (2,'f');
INSERT INTO t VALUES (3,'g');
INSERT INTO t VALUES (4,'h');
UDF(用户定义函数)——
最后,查询和结果:
SELECT id, dbo.ConcatenateCols(id) AS Cols -- UDF - ConcatenateCols(id)
FROM t GROUP BY Id
还可以添加更多信息,如表名,以及您尝试了什么?我们如何知道事件列中的项目应按什么顺序显示?它看起来是按字母顺序排列的,是吗?但你为什么要这么做?!?对我来说,这似乎是一个非常糟糕的主意。我正在做的可能是重复的,以查看哪个id有一个共同的序列来证明事件流是随机的,1,0,”)括号丢失我在我的系统中测试后有答案,没有任何这样的错误我知道它是什么:)这里没有必要使用它。当您需要为XML路径(“”)分隔来自
的值时,通常会使用它,但在这里它没有用-没有分隔符。请复制我的答案。我不明白您为什么没有尝试我的解决方案?简单明了,你选择的答案是我答案的副本,里面有东西(在这里没有用)。另一个使用临时表的,是我答案的副本,是上档的。。。
USE [t]
GO
CREATE FUNCTION dbo.ConcatenateCols(@Id INT)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @RtnStr VARCHAR(MAX)
SELECT @RtnStr = COALESCE(@RtnStr + '','') + col
FROM dbo.t
WHERE id = @Id AND col > ''
RETURN @RtnStr
END
GO
SELECT id, dbo.ConcatenateCols(id) AS Cols -- UDF - ConcatenateCols(id)
FROM t GROUP BY Id