SQL SERVER 如何把1列多行数据 合并成一列显示,具体格式如下:
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL SERVER 如何把1列多行数据 合并成一列显示,具体格式如下:相关的知识,希望对你有一定的参考价值。
查询表:
id title
1 title1
2 title2
3 title3
要求现实:
title1,title2,title3
示例
修改前:1列多行数据
修改后:合并成一列
示例语句
select类别,
名称 = (
stuff(
(select \',\' + 名称 from Table_A where 类别 = A.类别 for xml path(\'\')),
1,
1,
\'\'
)
)
from Table_A as A group by 类别
把得到的内容以XML的形式显示
for xml path(\'\')
把拼接的内容的第一个“,”去掉
stuff((select \',\' + ep_name from ep_detail where ep_classes = a.ep_classes for xml path(\'\')), 1, 1, \'\')
参考技术ASQL SERVER 如何把1列多行数据 合并成一列显示:
多行转一列,通过(,)将数据和并成一列。
SQL SERVER 如何把1列多行数据 合并成一列显示的延伸:
unpivot()函数用法:unpivot( x for x in ()),用法和privot类似。
例如:
转之前:SELECT code,name,type
FROM cd_data_dict
转之后:SELECT code,name,typeFROM cd_data_dict unpivot (name for code in (code,name))
参考技术B select stuff((select ','+title from tb for xml path('')),1,1,'')sql如何按条件把相同记录合并成一条记录?
单号 金额
001 10
001 20
002 20
结果
单号 金额1 金额2
001 10 20
002 20 null
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 SERVER 如何把1列多行数据 合并成一列显示,具体格式如下:的主要内容,如果未能解决你的问题,请参考以下文章