将两行合并为一行。像平均功能,但它会连续

时间:2015-03-11 04:47:24

标签: sql sql-server sql-server-2000

我使用的是SQL Server 2000。

我想做的就像平均功能,但它会连续。

我有办法做到这一点吗?

例如,我有这些数据。

Name   |   Score
Name1  |   50
Name1  |   70

,输出应该是这样的。

Name  |  Score
Name1 |  50,70

5 个答案:

答案 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;

Fiddle for reference

如果您使用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

Can I Comma Delimit Multiple Rows Into One Column?