
sql如何按条件把相同记录合并成一条记录?
单号金额001100012000220结果单号金额1金额2001102000220null...
单号 金额
001 10
001 20
002 20
结果
单号 金额1 金额2
001 10 20
002 20 null 展开
001 10
001 20
002 20
结果
单号 金额1 金额2
001 10 20
002 20 null 展开
4个回答
展开全部
楼主要实现的是金额动态列吧! 动态列的实现一般可以用两部来实现,第一步拼接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 单号
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,然后原样传入到第二步当中就可以了!
展开全部
SELECT id,
MAX(DECODE(money,10,money,NULL)) "10",
MAX(DECODE(money,20,money,NULL)) "20"
FROM t
GROUP BY id ;
更多追问追答
追问
单号会有多条相同记录 但金额不固定的 还有可能有小数位
追答
单号-金额-数量 不是更好?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是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
因为每个单号 有多个金额,这儿需要动态生成查询语句。所以这种办法很死。效果也不太好!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
去掉从复的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |