sql中 列转行 博客分类: 数据库 SQL脚本CC++C#
程序员文章站
2024-03-12 10:04:50
...
列转行,主要是通过UNION ALL ,MAX来实现。假如有下面这么一个表
代码CREATETABLEProgrectDetail
(
ProgrectName NVARCHAR(20),--工程名称
OverseaSupplyINT,--海外供应商供给数量
NativeSupply INT,--国内供应商供给数量
SouthSupplyINT,--南方供应商供给数量
NorthSupply INT--北方供应商供给数量
)
INSERTINTOProgrectDetail
SELECT'A',100,200,50,50
UNIONALL
SELECT'B',200,300,150,150
UNIONALL
SELECT'C',159,400,20,320
UNIONALL
SELECT'D',250,30,15,15
我们可以通过下面的脚本来实现,查询结果如下图所示
代码SELECTProgrectName,'OverseaSupply'ASSupplier,
MAX(OverseaSupply)AS'SupplyNum'
FROMProgrectDetail
GROUPBYProgrectName
UNIONALL
SELECTProgrectName,'NativeSupply'ASSupplier,
MAX(NativeSupply)AS'SupplyNum'
FROMProgrectDetail
GROUPBYProgrectName
UNIONALL
SELECTProgrectName,'SouthSupply'ASSupplier,
MAX(SouthSupply)AS'SupplyNum'
FROMProgrectDetail
GROUPBYProgrectName
UNIONALL
SELECTProgrectName,'NorthSupply'ASSupplier,
MAX(NorthSupply)AS'SupplyNum'
FROMProgrectDetail
GROUPBYProgrectName
用UNPIVOT 实现如下:
代码SELECTProgrectName,Supplier,SupplyNum
FROM
(
SELECTProgrectName,OverseaSupply,NativeSupply,
SouthSupply,NorthSupply
FROMProgrectDetail
)T
UNPIVOT
(
SupplyNumFORSupplierIN
(OverseaSupply,NativeSupply,SouthSupply,NorthSupply)
)P
代码CREATETABLEProgrectDetail
(
ProgrectName NVARCHAR(20),--工程名称
OverseaSupplyINT,--海外供应商供给数量
NativeSupply INT,--国内供应商供给数量
SouthSupplyINT,--南方供应商供给数量
NorthSupply INT--北方供应商供给数量
)
INSERTINTOProgrectDetail
SELECT'A',100,200,50,50
UNIONALL
SELECT'B',200,300,150,150
UNIONALL
SELECT'C',159,400,20,320
UNIONALL
SELECT'D',250,30,15,15
我们可以通过下面的脚本来实现,查询结果如下图所示
代码SELECTProgrectName,'OverseaSupply'ASSupplier,
MAX(OverseaSupply)AS'SupplyNum'
FROMProgrectDetail
GROUPBYProgrectName
UNIONALL
SELECTProgrectName,'NativeSupply'ASSupplier,
MAX(NativeSupply)AS'SupplyNum'
FROMProgrectDetail
GROUPBYProgrectName
UNIONALL
SELECTProgrectName,'SouthSupply'ASSupplier,
MAX(SouthSupply)AS'SupplyNum'
FROMProgrectDetail
GROUPBYProgrectName
UNIONALL
SELECTProgrectName,'NorthSupply'ASSupplier,
MAX(NorthSupply)AS'SupplyNum'
FROMProgrectDetail
GROUPBYProgrectName
用UNPIVOT 实现如下:
代码SELECTProgrectName,Supplier,SupplyNum
FROM
(
SELECTProgrectName,OverseaSupply,NativeSupply,
SouthSupply,NorthSupply
FROMProgrectDetail
)T
UNPIVOT
(
SupplyNumFORSupplierIN
(OverseaSupply,NativeSupply,SouthSupply,NorthSupply)
)P
推荐阅读
-
sql中 行转列 (一) 博客分类: 数据库 SQLSQL Server游戏生物脚本
-
sql中 列转行 博客分类: 数据库 SQL脚本CC++C#
-
Oracle中的序列化问题 博客分类: 数据库 Oracle编程SQL ServerSQLCache
-
Oracle PL/SQL 中循环语法语句的应用 博客分类: 数据库 OraclePL/SQL循环
-
sqlserver2008查找某数据库中的列是否存在某个值 博客分类: sqlserver SQL Server
-
sql server:删除表数据,标识列Id从1开始 博客分类: sqlserver@数据库 sql server
-
[转]SQL Server 2005 导出包含(insert into)数据的SQL脚本 博客分类: sqlserver@数据库 sql server
-
SQL Server 2008 中收缩数据库 博客分类: sqlserver@数据库 sql server收缩日志
-
用Sql Server 2000的数据库备份来还原Sql Server 2005中的数据库 博客分类: sqlserver@数据库 sql server 2000sql server 2005还原数据库
-
SQL Server 2005 导出包含(insert into)数据的SQL脚本 博客分类: sqlserver@数据库 sql server脚本