列转行

原创 2006年05月27日 15:05:00

最近做毕业设计,遇到一个问题要进行行列转换,由于本人水平有限,网上的代码也很难看懂,所以就到这里来求一句代码望哪位大哥大姐能帮帮忙,小弟不胜感激!

原来的数据:
材料费用   人工费用   机械费用  其他费用
  150        260         330       400


要转换成:
费用类型   数目
材料费用   150
人工费用   260
机械费用   330
其他费用   400

 

Select
N'材料费用' As 费用类型 ,
材料费用 As 数目
From TableName
Union All
Select
N'人工费用' As 费用类型 ,
人工费用 As 数目
From TableName
Union All
Select
N'机械费用' As 费用类型 ,
机械费用 As 数目
From TableName
Union All
Select
N'其他费用' As 费用类型 ,
其他费用 As 数目
From TableName

 

--如果不知列名,用動態語句
Declare @S Nvarchar(4000)
Set @S=''
Select @S=@S+'Select N'''+Name+N''' As 费用类型 ,'+Name+N' As 数目 From TEST Union All '
From SysColumns Where ID=OBJECT_ID('TEST') Order By ColID
Select @S=Left(@S,Len(@S)-10)
EXEC(@S)

--建立測試環境
Create Table TEST(
材料费用 Int,
人工费用 Int,
机械费用   Int,
其他费用 Int)
Insert TEST Select   150,        260        , 330       ,400
GO
--測試

--已知列名
Select
N'材料费用' As 费用类型 ,
材料费用 As 数目
From TEST
Union All
Select
N'人工费用' As 费用类型 ,
人工费用 As 数目
From TEST
Union All
Select
N'机械费用' As 费用类型 ,
机械费用 As 数目
From TEST
Union All
Select
N'其他费用' As 费用类型 ,
其他费用 As 数目
From TEST

--如果不知列名,用動態語句
Declare @S Nvarchar(4000)
Set @S=''
Select @S=@S+'Select N'''+Name+N''' As 费用类型 ,'+Name+N' As 数目 From TEST Union All '
From SysColumns Where ID=OBJECT_ID('TEST') Order By ColID
Select @S=Left(@S,Len(@S)-10)
EXEC(@S)
GO
--刪除測試環境
Drop Table TEST
GO
--結果
/*
费用类型 数目
材料费用 150
人工费用 260
机械费用 330
其他费用 400
*/

 

--来个动态的
create table tb(材料费用 int,人工费用 int,机械费用 int,其他费用 int)
insert into tb select 150,260,330,400
go

declare @sql varchar(8000)
set @sql=''
select @sql=@sql+' union all select ,'''+name+''' as 费用类型,'+name+' as 数目 from tb ' from syscolumns where id=object_id('tb') order by colid
set @sql=replace(@sql,'union all select ,','union all select ')
set @sql=stuff(@sql,1,11,'')
exec(@sql)

drop table tb

 

--上面的写的有点问题,太繁琐了.修改下
create table tb(材料费用 int,人工费用 int,机械费用 int,其他费用 int)
insert into tb select 150,260,330,400
go

declare @sql varchar(8000)
set @sql=''
select @sql=@sql+' union all select '''+name+''' as 费用类型,'+name+' as 数目 from tb ' from syscolumns where id=object_id('tb') order by colid
set @sql=stuff(@sql,1,11,'')
exec(@sql)

drop table tb

 

SQL 操作列转行查询

用一个学生分数表操作演示列转行的做法
  • HinstenyHisoka
  • HinstenyHisoka
  • 2016年07月30日 10:15
  • 3773

Sql 列转行 三种方法对比

SQL code------ 合并列值  --*************************************************************************...
  • liudong8510
  • liudong8510
  • 2012年01月05日 17:14
  • 11405

MySQL列转行统计数据

笔者在开发的过程中遇到了这样的问题。 其中item_id是固定的字典。值是死的。 其中item_id 等于 1,2,3的值是每一个work_quoted_id都需要相乘的。 相当于一份订单人...
  • u013803262
  • u013803262
  • 2017年06月30日 14:37
  • 301

SqlServer 2000/2005 列转行 行转列收集

--行列互转 /********************************************************************************************...
  • smartsmile2012
  • smartsmile2012
  • 2012年12月06日 10:36
  • 2521

SQL语句中列转行案例

--初始化示例 DECLARE @StudentGrade TABLE(student VARCHAR(20), chinese int, maths int, english int) IN...
  • prince_lintb
  • prince_lintb
  • 2016年07月28日 18:14
  • 1430

列转行

问:表结构如下time              ne        RegUser  OpenUserCount Sysrate2006-10-13 15:00WHMSC141.61288254  ...
  • lee576
  • lee576
  • 2006年11月07日 22:52
  • 1025

kettle 列转行的demo

1.元数据: 姓名,星期,工作小时 陈钢,周六,8.5 陈钢,周日, 陈钢,周一,9 陈钢,周二,9 陈钢,周三,9 陈钢,周四,9 陈钢,周五,9...
  • chen978616649
  • chen978616649
  • 2014年05月10日 18:09
  • 4935

SQL Server 列转行存储过程

--DROP PROCEDURE TableColToRow CREATE PROCEDURE TableColToRow @表名 VARCHAR(80), @哪字段转行 VARCHAR...
  • u011883102
  • u011883102
  • 2014年01月07日 12:01
  • 1091

MySQL 列转行 且分组进行统计

这是原表 四个年份 每年4个季度 我要将他转为按照年份统计的横表 且每列按照季度进行统计对应的销量 如下 用到case... when ... then ..  再用group by进行...
  • theglobal
  • theglobal
  • 2017年04月06日 11:10
  • 287

一列多行进行列转行操作

其实列转行,可以在数据库当中转换,也可以在程序中进行转换,因为我这个设计多张表所以在程序当中进行转换,在nosql非关系型数据库当中,可以把行转列看成一个矩阵,这个矩阵的列可以进行90度的转换,在非关...
  • u011230322
  • u011230322
  • 2016年08月31日 15:59
  • 835
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:列转行
举报原因:
原因补充:

(最多只允许输入30个字)