sql查询横转竖显示

sql查询横转竖显示,第1张

--建立测试数据

create table tb1

(

id varchar(20) not null,

value varchar(20) not null

)

go

insert into tb1

select '1','aa'

union all

select '1','bb'

union all

select '2','aaa'

go

--由于你这表里没有主健,可以用来做标识用,可以先生成一个临时表,并加上自增字段px用来做唯一标识列

select px=IDENTITY(INT,1,1),id,value

INTO #temptb

from tb1

go

select * from #temptb

go

--动态SQL

declare @sql varchar(8000)

set @sql = 'select'

select @sql = @sql + ',max(case px when ' +CONVERT(varchar(4),px)+ ' then value else '''' end) [' + id + ']'

from (select * from #temptb) a

set @sql = STUFF(@sql,7,1,' ') + ' from #temptb'

exec(@sql)

go

--静态SQL

select max(case px when 1 then value else '' end) [1],

max(case px when 2 then value else '' end) [1],

max(case px when 3 then value else '' end) [2]

from #temptb

go

--删除测试数据

DROP TABLE #temptb

go

DROP TABLE tb1

返回:

(所影响的行数为 3 行)

(所影响的行数为 3 行)

px id value

1 1 aa

2 1 bb

3 2 aaa

(所影响的行数为 3 行)

1 1 2

aa bb aaa

1 1 2

aa bb aaa

(所影响的行数为 1 行)

1、在mysql环境,创建数据库表,

create table test_data1(id int, name VARCHAR(20), day VARCHAR(20))

2、插入测试数据,

insert into test_data1 values(1,'liu',1)

insert into test_data1 values(2,'liu',3)

insert into test_data1 values(3,'wang',1)

insert into test_data1 values(4,'wang',2)

insert into test_data1 values(4,'wang',4)

3、查询表中数据,select * from test_data1;

4、编写目标sql;

select name, 

     max(case when day=1 then 1 end) d_1,

     max(case when day=2 then 2 end) d_2,

     max(case when day=3 then 3 end) d_3,

     max(case when day=4 then 4 end) d_4

from test_data1 t group by name

可以选中A1到A10 右键 复制 选中A13 右键 选择性粘贴就可以了。但这个上面区域更改后这个不刷新想要刷新的话可以用公式实现

选中A13:J13这十个单元格一定是要十个,上面对应的有几个要转换下来这里就需要几个单元格

然后输入(就是选中后直接输入=及公式就行)

=TRANSPOSE(A1:A10)

这个是个数组公式输入完后不可以直接回车得ctrl+shift+enter

希望能帮助到你


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6739049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存