码迷,mamicode.com
首页 > 其他好文 > 详细

横表、纵表转换

时间:2015-01-06 15:22:31      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

1.纵表转换为横表

纵表SQL

CREATE TABLE [dbo].[TableA](
    [Name] [nvarchar](10) NOT NULL,
    [Course] [nvarchar](50) NOT NULL,
    [Grade] [int] NOT NULL
)
INSERT [dbo].[TableA] ([Name], [Course], [Grade]) VALUES (N张三, N语文, 75)
INSERT [dbo].[TableA] ([Name], [Course], [Grade]) VALUES (N张三, N数学, 80)
INSERT [dbo].[TableA] ([Name], [Course], [Grade]) VALUES (N张三, N英语, 90)
INSERT [dbo].[TableA] ([Name], [Course], [Grade]) VALUES (N李四, N语文, 95)
INSERT [dbo].[TableA] ([Name], [Course], [Grade]) VALUES (N李四, N数学, 55)

技术分享

转换SQL

select 
    Name,
    SUM(case Course when 语文 then Grade else 0 end) as 语文,
    SUM(case Course when 数学 then Grade else 0 end) as 数学,
    SUM(case Course when 英语 then Grade else 0 end) as 英语
from TableA
group by Name

转换结果

技术分享

 

2.横表转换为纵表

横表SQL

create table Table_B
(
    ID int identity(1,1) primary key,
    姓名 varchar(20),
    语文 int,
    数学 int,
    英语 int
)
insert into Table_B(姓名,语文,数学,英语) values(张三,60,70,80)
insert into Table_B(姓名,语文,数学,英语) values(李四,90,100,45)
insert into Table_B(姓名,语文,数学,英语) values(王五,15,26,37)

技术分享

转换SQL

select 
    姓名,
    语文 as 科目,
    语文 as 成绩
from Table_B union all
select 
    姓名,
    数学 as 科目,
    数学 as 成绩
from Table_B union all
select 
    姓名,
    英语 as 科目,
    英语 as 成绩
from Table_B 
order by 姓名,科目

转换结果

技术分享

横表、纵表转换

标签:

原文地址:http://www.cnblogs.com/zaibinzhang/p/4206008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!