我使用的是SQL Server 2000。
我想做的就像平均功能,但它会连续。
我有办法做到这一点吗?
例如,我有这些数据。
Name | Score
Name1 | 50
Name1 | 70
,输出应该是这样的。
Name | Score
Name1 | 50,70
答案 0 :(得分:0)
使用以下查询供您参考。
<强>查询强>
Select main.doctorID, Left(Main.submain,Len(Main.submain)-1) As 'Title' From ( Select distinct ST2.doctorID, ( Select convert(varchar,ST1.encounterid) + ',' AS [text()] From dbo.enc ST1 Where ST1.doctorID = ST2.doctorID ORDER BY ST1.doctorID For XML PATH ('') ) submain From dbo.enc ST2 ) [Main]
答案 1 :(得分:0)
如果您可以使用CLR,请查看以下示例:
https://msdn.microsoft.com/en-us/library/ms165055%28v=vs.90%29.aspx
它提供了一个连接值的自定义聚合,从而产生非常干净的代码。
答案 2 :(得分:0)
您可以通过这个简单的查询来完成。
Select Name, (Select SUBSTRING((SELECT ', '+Score from TableName for XML
Path('')) ,2,8000)) from TableName
你会得到像
这样的结果ColumnName | val1,val2,....
答案 3 :(得分:0)
<强>查询强>
SELECT Name,
(SELECT SUBSTRING((SELECT ', '+CAST(Score AS VARCHAR(MAX)) FROM my_table FOR XML Path('')) ,2,1000)) AS Score
FROM my_table
GROUP BY name;
如果您使用SQL Server 2000
,请尝试创建如下函数。
CREATE TABLE my_table(name VARCHAR(50),score INT);
INSERT INTO my_table VALUES('Name1',50);
INSERT INTO my_table VALUES('Name1',70);
功能
CREATE FUNCTION commaseparated(@name VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @score VARCHAR(MAX)
SELECT @score = COALESCE(@score + ', ', '') + CAST(score AS VARCHAR(MAX))
FROM my_table
WHERE name = @name
RETURN @score
END
SELECT
name,
score = dbo.commaseparated(name)
FROM my_table
GROUP BY name;
答案 4 :(得分:0)
检查一下。
INSERT INTO @T VALUES
('name1', 50),
('name1', 70)
SELECT * FROM @T
Select name ,
STUFF((SELECT ',' + cast( score as varchar(50)) FROM @T WHERE (
name=Result.name) FOR XML PATH ('')),1,1,'') AS BATCHNOLIST
From @T AS Result
GROUP BY name