sql如何按条件把相同记录合并成一条记录?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql如何按条件把相同记录合并成一条记录?相关的知识,希望对你有一定的参考价值。

单号 金额
001 10
001 20
002 20
结果
单号 金额1 金额2
001 10 20
002 20 null

楼主要实现的是金额动态列吧! 动态列的实现一般可以用两部来实现,第一步拼接group 出SQL,第二步拼接sql  ,比如楼主的需求可以这样来实现

1: select 'sum (case when 金额 = '' '金额' '' then 金额 else 0 end) ' from 数据表 group by 金额

2: 将上面的结果字符 用程序处理并拼接起来,可以得到,拼接后的结果如下:

select 单号 ,sum (case when 金额 = 金额1 then 金额 else 0 end) as 金额1 ,
sum (case when 金额 = 金额2 then 金额 else 0 end) as 金额2
from 数据表 group by 单号追问

怎么用程序处理并接? 存储过程?

追答

用程序处理吧! 第一步查出来后,用list接收,再循环拼成SQL,然后原样传入到第二步当中就可以了!

追问

我不用能程序啊 只能用数据库脚本 本来想用视图实现 莫非现在要用存储过程

参考技术A SELECT id,
  MAX(DECODE(money,10,money,NULL)) "10",
  MAX(DECODE(money,20,money,NULL)) "20"
FROM t
GROUP BY id ;

追问

单号会有多条相同记录 但金额不固定的 还有可能有小数位

追答

单号-金额-数量 不是更好?

追问

我就是要实现金额并排的效果啊

追答select id,wmsys.wm_concat( money) from t group by id;

参考技术B 是mssql 嘛?

追问

是的

追答我有个笨方法,可以试一下。就是太麻烦啦!
with cte as(
select 单号,(row_number()over(partition by 单号 order by 金额)) as seqno from 表
)
select 单号, 
(select 金额 from cte where 单号 = c1.单号 and seqno = 1) as 金额1,
(select 金额 from cte where 单号 = c1.单号 and seqno = 2) as 金额2
from cte as c1 group by 

因为每个单号 有多个金额,这儿需要动态生成查询语句。所以这种办法很死。效果也不太好!

参考技术C 去掉从复的?

SQL实现将多行记录合并成一行

SQL实现将多行记录合并成一行

我们在数据开发的过程中,经常会遇到这样的需求,就是将多行合并为一行,并且用特定字符隔开。

1、数据处理前

2,结果数据展示

3,hive处理方式

在hive里面,用concat_ws函数处理
格式: concat_ws(‘分隔符’,collect_set/collect_list(字段))
参数释义:
concat_ws:多行合并一行函数
collect_set:合成数组,数据已去重
collect_list:合成数组, 数据未去重

SQL脚本:
select school,concat_ws(',',collect_set(name)) from student
group by school;

4,MySQL处理方式

GROUP_CONCAT(字段 分隔符)
注意:MySQL在GROUP_CONCAT函数中,去重需要使用distinct 关键字,如果需要先排序再合并,也可以使用order by 关键字。

select school,GROUP_CONCAT(name,',') from student
group by school;

我是喵,有问题随时沟通哟~~~

以上是关于sql如何按条件把相同记录合并成一条记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 PySpark / AWS Glue 中 RDD 的所有行加入/连接/合并成一条长线?

Tableau何如将两条数据合并成一条显示

多个相同表头的excel表格如何合并成一个

SQL怎么把多条数据合并成一条数据?

oracle中如何把表中具有相同值列的多行数据合并成一行

SQL语句怎么实现几列数据合并成一条??