列转行

原创 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)列转行工具

  • 2011年08月22日 17:12
  • 499KB
  • 下载

sql 列转行

  • 2013年08月09日 16:42
  • 31KB
  • 下载

oracle中的行列转换(一 列转行 pivot)

在实际统计中,我们可能需要对统计的数据进行行列转换以达到我们想要的更便于分析查看对比的格式。例如:我们想要统计在一段时间(过去一年或一个月)所有客户在24小时的消费情况。对于结果我们更愿意让一行记录标...
  • mix0313
  • mix0313
  • 2016年03月31日 16:39
  • 487

SQL 2005 列转行的方法

  • 2009年06月15日 15:40
  • 17KB
  • 下载

oracle列转行

  • 2014年12月08日 16:03
  • 16KB
  • 下载

mysql 列转行,合并字段

原文链接 数据表:  列转行:利用max(case when then) max---聚合函数 取最大值 (case course when '语文' then score...

SQL列转行显示方法

  • 2017年08月23日 09:06
  • 92KB
  • 下载

SQL 列转行

  • 2012年06月26日 10:31
  • 2KB
  • 下载

sql 多行转多列,多行转一列合并数据,列转行

多行转多列:    要实现该功能pivot行数应该是必不可少吧,下面我就来说说该函数如何使用  局限性:该函数只能针对已知行数要转为几列才能使用,动态行转动态列不支持(个人所知,如可以实现请指教) 用...

MySql 列转行实例

  • 2016年06月03日 11:25
  • 1KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:列转行
举报原因:
原因补充:

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