首页 > 代码库 > 横表、纵表转换

横表、纵表转换

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 TableAgroup 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 allselect     姓名,    数学 as 科目,    数学 as 成绩from Table_B union allselect     姓名,    英语 as 科目,    英语 as 成绩from Table_B order by 姓名,科目

转换结果

技术分享

横表、纵表转换