sql 行转列

熙风 2014-01-03 12:31:01
原表结构
1 A B C D E F
2 。。。。。。。
3 。。。。。。。
4 。。。。。。。
5 。。。。。。。


转换成
2 3 4 5
A 。。。。
B 。。。。
C 。。。。
D 。。。。
E 。。。。
F 。。。。
...全文
380 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-01-03
  • 打赏
  • 举报
回复
结构搞好点行不?别搞个点点点啊,都不知道1是第一行还是表头
熊猫王子 2014-01-03
  • 打赏
  • 举报
回复

select 
    [1],
    [A]=max(case when [column1]='2' then [column2] else 0 end),
    [B]=max(case when [column1]='3' then [column2] else 0 end),
    [C]=max(case when [column1]='4' then [column2] else 0 end),
    [D]=max(case when [column1]='5' then [column2] else 0 end)
from 
    T 
group by [1]

發糞塗牆 2014-01-03
  • 打赏
  • 举报
回复
美化一下
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2014-01-03 13:18:56
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
--	Dec 28 2012 20:23:12 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([1] VARCHAR(10),[A] varchar(10),[B] varchar(10),[C] varchar(10),[D] varchar(10),[E] varchar(10),[F] varchar(10))
insert [huang]
select 2,'asdf','1B','hf','e','n4','nb' union all
select 3,'asdf','1B','hf','e','n4','nb' union all
select 4,'asdf','1B','hf','e','n4','nb' union all
select 5,'asdf','1B','hf','e','n4','nb'
--------------开始查询--------------------------

SELECT CAST(letter AS VARCHAR) letter,[2]=max(CASE WHEN [1]=2 THEN [value] ELSE NULL END )
,[3]=max(CASE WHEN [1]=3 THEN [value] ELSE NULL END )
,[4]=max(CASE WHEN [1]=4 THEN [value] ELSE NULL END )
,[5]=max(CASE WHEN [1]=5 THEN [value] ELSE NULL END )
FROM (
select 
    [1],[letter],[value] 
from 
    huang 
unpivot 
    ([value] for [letter] in([A],[B],[C],[D],[E],[F]))b)a
GROUP BY letter


----------------结果----------------------------
/* 
letter                         2          3          4          5
------------------------------ ---------- ---------- ---------- ----------
A                              asdf       asdf       asdf       asdf
B                              1B         1B         1B         1B
C                              hf         hf         hf         hf
D                              e          e          e          e
E                              n4         n4         n4         n4
F                              nb         nb         nb         nb*/
發糞塗牆 2014-01-03
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2014-01-03 13:18:56
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
--	Dec 28 2012 20:23:12 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([1] VARCHAR(10),[A] varchar(10),[B] varchar(10),[C] varchar(10),[D] varchar(10),[E] varchar(10),[F] varchar(10))
insert [huang]
select 2,'asdf','1B','hf','e','n4','nb' union all
select 3,'A','B','C','D','E','F' union all
select 4,'A','B','C','D','E','F' union all
select 5,'A','B','C','D','E','F'
--------------开始查询--------------------------

SELECT letter,[2]=max(CASE WHEN [1]=2 THEN [value] ELSE NULL END )
,[3]=max(CASE WHEN [1]=3 THEN [value] ELSE NULL END )
,[4]=max(CASE WHEN [1]=4 THEN [value] ELSE NULL END )
,[5]=max(CASE WHEN [1]=5 THEN [value] ELSE NULL END )
FROM (
select 
    [1],[letter],[value] 
from 
    huang 
unpivot 
    ([value] for [letter] in([A],[B],[C],[D],[E],[F]))b)a
GROUP BY letter


----------------结果----------------------------
/* 
letter                                                                                                                           2          3          4          5
-------------------------------------------------------------------------------------------------------------------------------- ---------- ---------- ---------- ----------
A                                                                                                                                asdf       A          A          A
B                                                                                                                                1B         B          B          B
C                                                                                                                                hf         C          C          C
D                                                                                                                                e          D          D          D
E                                                                                                                                n4         E          E          E
F                                                                                                                                nb         F          F          F
*/
熙风 2014-01-03
  • 打赏
  • 举报
回复
引用 8 楼 DBA_Huangzj 的回复:
固定的话case when就可以拉
没那么简单
發糞塗牆 2014-01-03
  • 打赏
  • 举报
回复
固定的话case when就可以拉
熙风 2014-01-03
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
那1就是表头咯?结果中列是固定的不?
行列都是固定的
熙风 2014-01-03
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
那1就是表头咯?结果中列是固定的不?
1 是表头, 2,3,4,5,6 是每行的第一列 现在要把列 换成每行的第一列, 每行的第一列换成表头 就是把表头和每行的第一列互换位置
發糞塗牆 2014-01-03
  • 打赏
  • 举报
回复
那1就是表头咯?结果中列是固定的不?
熙风 2014-01-03
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
结构搞好点行不?别搞个点点点啊,都不知道1是第一行还是表头
点都是数据
Leon_He2014 2014-01-03
  • 打赏
  • 举报
回复

select 2 id,1 A,2 B,3 C,4 D,5 E,6 F
into #t
union all select 3 ,1,2,3,4,5,6
union all select 4 ,1,2,3,4,5,6
union all select 5 ,1,2,3,4,5,6

select * from #t

--查询
select name,max([2]) [2]
,max([3]) [3]
,max([4]) [4]
,max([5]) [5]
from
(
select 'A' NAME,case when id=2 then A end as '2'
,case when id=3 then A end as '3'
,case when id=4 then A end as '4'
,case when id=5 then A end as '5'
from #t
union all
select 'B',case when id=2 then B end as '2'
,case when id=3 then B end as '3'
,case when id=4 then B end as '4'
,case when id=5 then B end as '5'
from #t
union all
select 'C',case when id=2 then C end as '2'
,case when id=3 then C end as '3'
,case when id=4 then C end as '4'
,case when id=5 then C end as '5'
from #t
union all
select 'D',case when id=2 then D end as '2'
,case when id=3 then D end as '3'
,case when id=4 then D end as '4'
,case when id=5 then D end as '5'
from #t
union all
select 'E',case when id=2 then E end as '2'
,case when id=3 then E end as '3'
,case when id=4 then E end as '4'
,case when id=5 then E end as '5'
from #t
union all
select 'F',case when id=2 then F end as '2'
,case when id=3 then F end as '3'
,case when id=4 then F end as '4'
,case when id=5 then F end as '5'
from #t
) t
GROUP BY name

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧