sqlserver 行转列(转)

Posted nfqd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver 行转列(转)相关的知识,希望对你有一定的参考价值。

1、行转列 微软官方的图:

 

技术分享图片

 

 

方法二

技术分享图片

 

 

-- 行转列

DROP TABLE studentB;

CREATE TABLE studentB (
姓名 varchar(10),
语文 varchar(10),
数学 varchar(10),
物理 varchar(10)
);

INSERT INTO studentB
VALUES (‘张三‘, 75, 83, 96),
(‘李四‘, 74, 84, 95);

SELECT *
FROM (
SELECT 姓名, ‘语文‘ AS 科目, 语文 AS 分数
FROM studentB
UNION ALL
SELECT 姓名, ‘数学‘ AS 科目, 数学 AS 分数
FROM studentB
UNION ALL
SELECT 姓名, ‘物理‘ AS 科目, 物理 AS 分数
FROM studentB
) a

 

 

2: 列转行

 

怎么把一条记录拆分成几条记录?
User     No.         A           B            C
1        1           21          34           24
1        2           42          25           16

RESULT:

User     No.        Type       Num
1        1          A          21
1        1          B          34
1        1          C          24
1        2          A          42
1        2          B          25
1        2          C          16


declare @t table(usser int ,no int ,a int,b int, c int)
insert into @t select 1,1,21,34,24
union all select 1,2,42,25,16

SELECT usser,no,Type=attribute, Num=value
FROM @t
  UNPIVOT
  (
    value FOR attribute IN([a], [b], [c])
  ) AS UPV
        
--结果
/*

usser   no       Type      num
----         ---      --------  --------
1           1         a          21
1           1         b          34
1           1         c          24
1           2         a          42
1           2         b          25
1           2         c           16
*/

 

方法二

技术分享图片

 

-- 列传行
drop table studentA;
create table studentA (name varchar(10) ,subject varchar(10) ,score int) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into studentA values (‘张三‘,‘语文‘,75),(‘张三‘,‘数学‘,83),(‘张三‘,‘物理‘,96);
insert into studentA values (‘李四‘,‘语文‘,74),(‘李四‘,‘数学‘,84),(‘李四‘,‘物理‘,95);

select name 姓名,
max(case subject when ‘语文‘ then score end) 语文,
max(case subject when ‘数学‘ then score end) 数学,
max(case subject when ‘物理‘ then score end) 物理
from studentA
group by name



 
























































以上是关于sqlserver 行转列(转)的主要内容,如果未能解决你的问题,请参考以下文章

SQLSERVER有张表,需要每晚自动实现行转列。

Sqlserver行转列pivot()

SqlServer PIVOT函数快速实现行转列,UNPIVOT实现列转行

SqlServer行转列(PIVOT),列转行(UNPIVOT)总结

死磕:SQL行转列汇总(全网最全最详细)

sqlserver怎么行转列?