您的位置:首页 > 数据库

sql 行列转换

2017-11-23 15:03 288 查看
-- 行转列

CREATE  TABLE [ss_text]

(

   [UserName]         NVARCHAR(20),        --学生姓名

   [Subject]          NVARCHAR(30),        --科目

   [Score]            FLOAT,               --成绩

)

INSERT INTO [ss_text] SELECT '张三', '语文', 80

INSERT INTO [ss_text] SELECT '张三', '数学', 90

INSERT INTO [ss_text] SELECT '张三', '英语', 70

INSERT INTO [ss_text] SELECT '张三', '生物', 85

INSERT INTO [ss_text] SELECT '李四', '语文', 80

INSERT INTO [ss_text] SELECT '李四', '数学', 92

INSERT INTO [ss_text] SELECT '李四', '英语', 76

INSERT INTO [ss_text] SELECT '李四', '生物', 88

INSERT INTO [ss_text] SELECT '码农', '语文', 60

INSERT INTO [ss_text] SELECT '码农', '数学', 82

INSERT INTO [ss_text] SELECT '码农', '英语', 96

INSERT INTO [ss_text] SELECT '码农', '生物', 78

SELECT * FROM [ss_text] /*数据源*/

PIVOT 

(

    sum(Score/*行转列后 列的值*/) FOR 

    Subject/*需要行转列的列*/ IN ([语文],[数学],[英语],[生物]/*列的值*/)

) AS T

-------------------------------------------------------------------------------------------------------

SELECT * FROM [ss_text]

PIVOT (SUM (Score) FOR Subject IN (语文,数学,英语,生物)) AS T

-- 列转行

CREATE TABLE [dbo].[sgt](
[rlrq] [varchar](20) NULL,
[mr] [decimal](20, 4) NULL,
[mc] [decimal](20, 4) NULL,
[lx] [varchar](10) NULL

) ON [PRIMARY]

insert into sgt values('2011-11-22',1,11,'a')

insert into sgt values('2011-11-22',2,22,'b')

select rlrq,

max(case lx when 'a' then mr else null end) as a,

max(case lx when 'b' then mr else null end) as b

from sgt where rlrq='2011-11-20' group by rlrq

union

select rlrq,

max(case lx when 'a' then mc else null end) as a,

max(case lx when 'b' then mc else null end) as b

from sgt where rlrq='2011-11-20' group by rlrq
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: