繁体   English   中英

在 SQL 服务器中合并具有同一列的多行

[英]Merging multiple rows with same column in SQL Server

在 SQL 服务器中将多行值与同一列组合的最有效方法是什么?

数据表

类别 部分 支付
01 一个 1425
01 7647
01 一个 6164
01 3241

我正在努力实现以下结果

类别 部分 支付
01 一个 1425+6164
01 7647+3241

当类别和段相同时,我想合并行。

提前致谢!

用这个

SELECT category,segment,payment = STUFF((
                                SELECT '+' + CONVERT(VARCHAR,payment)
                                FROM TABLENAME t
                                WHERE t.category = TABLENAME.category AND t.segment = TABLENAME.segment                               
                                FOR XML PATH('')
                                ), 1, 1, '')
FROM TABLENAME 
GROUP BY category,segment

如果您使用 + 号付款,请使用这样的东西。

SELECT category,segment,SUM(payment) as payment
FROM TABLENAME 
GROUP BY category,segment

如果你想要总和然后删除东西并只使用Sum(payment)

您可以将 SUM 聚合 function 与 GROUP BY 子句一起使用,如下所示:

SELECT category, segment, SUM(payment) AS 'payment'
FROM table
GROUP BY category, segment

如果您想要实际总数,则可以汇总和汇总:

select category, segment, sum(payment)
from table
group by category, segment

如果你想要字符串,你可以尝试这样的事情(对于 mysql):

select category, segment, GROUP_CONCAT(payment SEPARATOR '+')
from table
group by category, segment

你的桌子

 declare @t TABLE (
   category int  NOT NULL 
  ,segment  NVARCHAR(50) NOT NULL
  ,payment  int  NOT NULL
);
INSERT INTO @t(category,segment,payment) VALUES (01,'A',1425);
INSERT INTO @t(category,segment,payment) VALUES (01,'B',7647);
INSERT INTO @t(category,segment,payment) VALUES (01,'A',6164);
INSERT INTO @t(category,segment,payment) VALUES (01,'B',3241);

如果您希望将付款列作为字符串,请使用以下内容

SELECT
category, 
segment,
    STRING_AGG(cast(payment as nvarchar(50)),'+') 
        WITHIN GROUP (ORDER BY category) payment
FROM
   @t T
GROUP BY
    category,segment

如果您希望付款栏为 NUMBER,请使用以下

SELECT
category, 
segment,
SUM(payment) AS payment 
FROM
   @t T
GROUP BY
    category,segment

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM