当前位置:首页 » 编程语言 » sql中列转行
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql中列转行

发布时间: 2023-08-15 23:52:15

A. sqlServer 列转行

sql server 请参阅下面的代码,列转行

sqlserver列转行方法分享

以下例子适用 sqlserver 2005版本及以上

createtableA(info1varchar(30),
[2012]int,
[2008]int,
[2018]int,
[2013]int
)
go

insertintoAvalues('A',8,null,null,20)
insertintoAvalues('B',null,7,null,3)
insertintoAvalues('C',12,4,null,null)
insertintoAvalues('D',null,null,5,16)
go

---列行转换适用于sqlserver2005及以上版本
SELECTinfo1,nian,qty
fromA
unpivot(qtyfornianin([2012],[2008],[2018],[2013]))astest
GO

truncatetableA
droptableA

B. sql 最简单的列转行

oracle中列传行可用wm_concat来实现。
如test表中数据如下:
现要将name列一列显示成行,可用如下语句:
select wm_concat(name) from test;结果:

C. mysql列转行(逗号分隔)

mysql查询含逗号的数据,将逗号拆分为多行展示:

原始数据如下:

现在因为新的需求,需要将这些数据转化为如下形式:

假设我们需要处理的表结构为:

使用如下sql语句即可实现需求:

查询的主要思路为,原表与一个包含连续自增长字段的表进行join,得到字符串分隔后的索引值,其中 length( a.name ) - length( REPLACE ( a.name, ',', '' ) ) + 1 语句获得字符串逗号分隔之后得到的数据长度,两表关联之后,会得到相应行数的数据。比如,

在join之后会得到:

之后对查询中的结果,使用substring_index方法进行截取,然后得到我们自己想要的数据。

D. sql server 列转行

SQL Server 2005之后支持pivot关键字。
select year,[1],[2],[3],[4]
from 表A
pivot(max(num) for [month] in ([1],[2],[3],[4])) as pvt

SQL Server 2000以及之前版本,可以参考imlees的方法。

E. sql列转行,如何把表转化为这个结果一共一行 一列.如何实现.

通用的办法是用动态sql解决:

declare@sqlvarchar(2000);
set@sql='select''';
select@sql=@sql+列名+','from表名;
select@sql=left(@sql,len(@sql)-1)+''''
exec(@sql);

此外,SQL Server2005以上版本可以用XML Path解决。

SELECT列名+','FROM表名FORXMLPATH('')

这样将直接得到'a,b,c,d,d,e,',需要进一步处理去掉最后的逗号

F. sqlserver 怎么列转行

PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现
PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别(在数据库属性->选项->兼容级别改为 90 )
SQL2008 中可以直接使用
完整语法:

table_source

PIVOT(

聚合函数(value_column)

FOR pivot_column

IN(<column_list>)

)

View Code
UNPIVOT 用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现

完整语法:

table_source

UNPIVOT(

value_column

FOR pivot_column

IN(<column_list>)

)

G. MS SQL SERVER 如何把多列的值 , 变成一列多行 .

  1. 行转列,列转行是我们在开发过程中经常碰到的问题

  2. 行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现。用传统的方法,比较好理解。层次清晰,而且比较习惯。

  3. 但是PIVOT 、UNPIVOT提供的语法比一系列复杂的SELECT...CASE 语句中所指定的语法更简单、更具可读性.

  4. --行转列的静态方案一:CASE WHEN,兼容sql2000
    select custid,
    3 sum(case when YEAR(orderdate)=2002 then qty end) as [2002],
    sum(case when YEAR(orderdate)=2003 then qty end) as [2003],
    sum(case when YEAR(orderdate)=2004 then qty end) as [2004]
    from orders
    group by custid;

  5. --行转列的静态方案二:PIVOT,sql2005及以后版本
    select *
    from (select custid,YEAR(orderdate) as years,qty from orders) as ord
    pivot(sum(qty) for years in([2002],[2003],[2004]))as p