关于网友提出的“ SQL表转置,求高手”问题疑问,本网通过在网上对“ SQL表转置,求高手”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: SQL表转置,求高手
描述: 现有表,行数是不确定的
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
请高手帮忙,谢谢!
解决方案1: 行列相互转换问题
解决方案2:本帖最后由 ap0405140 于 2016-06-07 17:54:03 编辑
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)
*/
解决方案3: http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html
你可以参考下这里.
估计得用动态的行转列了.
另外,你这个置用Excel应该会很简单的.如果是手动查询数据的话,不防在EXCEL里操作
以上介绍了“ SQL表转置,求高手”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2817373.html