SQL SERVER STUFF FUNCTION SCENARIO

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL SERVER STUFF FUNCTION SCENARIO相关的知识,希望对你有一定的参考价值。

在SQL Server中,我有一个这样的表:

Col-1    Col-2    Col-3
------------------------
A         123     25.13
A         456     67.00
A         789     81.89

我想要这样的输出:

Col-1      Col-2            Col-3
-----------------------------------
A         123,456,789      174.02
答案

你可以使用FOR XML子句与STUFF()函数:

select co1, stuff( (select distinct ','+cast(t1.col2 as varchar(255)) 
                    from table t1 
                    where t1.col1 = t.col1
                    for xml path('')
                    ), 1, 1, ''
                 ) as col2, 
       sum(col3)
from table t
group by co1;
另一答案

样本数据 :

DECLARE @T TABLE(Col1 VARCHAR(1),
                 Col2 INT,
                 Col3 FLOAT)

INSERT INTO @T( Col1, Col2, Col3 )
VALUES  ('A',123,25.13),('A',456,67),('A',789,81.89)

查询:

;WITH Keys AS (SELECT Col1,
                      SUM(Col3) AS Col3
               FROM @T 
               GROUP BY Col1)
SELECT Keys.Col1,
       REPLACE(REPLACE(REPLACE( CONVERT (NVARCHAR(MAX),(SELECT T.Col2 AS A
        FROM @T AS T 
        WHERE T.Col1 = Keys.Col1
        FOR XML PATH(''))),'</A><A>',','),'<A>',''),'</A>','') AS Col2,

        Keys.Col3
FROM Keys

结果:

Col1    Col2          Col3
A       123,456,789   174.02

以上是关于SQL SERVER STUFF FUNCTION SCENARIO的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server stuff函数的用法

带有 2 个内部联接的 SQL Server 2014 STUFF

sql server的一些函数------CHARINDEX(),PATINDEX(),STUFF(),SUBSTRING(),RIGHT(),LEFT()

SQL Server 行转列,列转行

SQL Server 行转列,列转行。多行转成一列

Sql Server合并多行询数据到一行:使用自连接FOR XML PATH('')STUFF或REPLACE函数