SQL表轉置,求高手

kt_glh 2016-06-04 09:11:47
現有表,行數是不確定的
month isvs dep times qty ngqty ngl
May-16 內部重工 AB 54.5 48730 526 0.0107
May-16 內部重工 電木 231.5 210260 0 0
May-16 加工全檢 C 50 9503 173 0.0179
May-16 加工全檢 D 370 72829 422 0.0058
May-16 加工全檢 F 24 1581 91 0.0544
May-16 外部重工 AB 3.5 1200 40 0.0323
May-16 重工單重工 AB 135 69417 547 0.0078
May-16 重工單重工 D 11 12000 0 0
May-16 噴砂 C 36 8630 0 0
May-16 噴砂 D 24 43888 0 0

需要重置成為下表
month May-16 May-16 May-16 May-16 May-16 May-16 May-16 May-16 May-16 May-16
isvs 內部重工 內部重工 加工全檢 加工全檢 加工全檢 外部重工 重工單重工 重工單重工 噴砂 噴砂
dep AB 電木 C D F AB AB D C D
times 54.5 231.5 50 370 24 3.5 135 11 36 24
qty 48730 210260 9503 72829 1581 1200 69417 12000 8630 43888
ngqty 526 0 173 422 91 40 547 0 0 0
ngl 0.0107 0 0.0179 0.0058 0.0544 0.0323 0.0078 0 0 0

請高手幫忙,謝謝!
...全文
169 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rmini 2016-06-10
  • 打赏
  • 举报
回复
行列相互转换问题
唐诗三百首 2016-06-07
  • 打赏
  • 举报
回复

create table kt
(month varchar(20),isvs varchar(20),dep varchar(20),times varchar(20),qty varchar(20),ngqty varchar(20), ngl varchar(20))

insert into kt
select 'May-16', '內部重工', 'AB', ' 54.5', '48730', '526', '0.0107' union all
select 'May-16', '內部重工', '電木 ', '231.5', '210260', '0', '0' union all
select 'May-16', '加工全檢 ', 'C', '50', '9503', '173', '0.0179'


select * from kt
/*
month isvs dep times qty ngqty ngl
-------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
May-16 內部重工 AB 54.5 48730 526 0.0107
May-16 內部重工 電木 231.5 210260 0 0
May-16 加工全檢 C 50 9503 173 0.0179

(3 row(s) affected)
*/


declare @tsql varchar(6000)

select @tsql=isnull(@tsql+',','')+'['+rtrim(number)+']'
from master.dbo.spt_values
where type='P'
and number between 1 and (select count(1) from kt)

select @tsql='with v as(
select rn,col,val,case col when ''month'' then 1 when ''isvs'' then 2 when ''dep'' then 3
when ''times'' then 4 when ''qty'' then 5 when ''ngqty'' then 6
when ''ngl'' then 7 else 8 end ''coo''
from (select row_number() over(order by getdate()) ''rn'',* from kt) t
unpivot(val for col in(month,isvs,dep,times,qty,ngqty,ngl)) u)
select cast(col as varchar(20)) ''col'','+@tsql
+' from v
pivot(max(val) for rn in('+@tsql+')) p
order by coo '

exec(@tsql)

/*
col 1 2 3
-------------------- -------------------- -------------------- --------------------
month May-16 May-16 May-16
isvs 內部重工 內部重工 加工全檢
dep AB 電木 C
times 54.5 231.5 50
qty 48730 210260 9503
ngqty 526 0 173
ngl 0.0107 0 0.0179

(7 row(s) affected)
*/
kt_glh 2016-06-06
  • 打赏
  • 举报
回复
沒人啊?
kingtiy 2016-06-04
  • 打赏
  • 举报
回复
http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html 你可以参考下这里. 估计得用动态的行转列了. 另外,你这个置用Excel应该会很简单的.如果是手动查询数据的话,不防在EXCEL里操作

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧