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, \'\')

参考技术A

SQL 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

楼主要实现的是金额动态列吧! 动态列的实现一般可以用两部来实现,第一步拼接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 SERVER 如何把1列多行数据 合并成一列显示,具体格式如下:的主要内容,如果未能解决你的问题,请参考以下文章

SQL 多行多列数据清洗合并为一行

SQL SERVER将多行数据合并成一行(转)

SQL 列转行,即多行合并成一条

如何用sql语句将多行合并成一行

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

Mysql来帮忙:多行合并成一列