您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> MSSQL >> SQL表转置,求高手

SQL表转置,求高手

来源:网络整理     时间:2016/7/20 0:25:36     关键词:

关于网友提出的“ 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表转置,求高手


以上介绍了“ SQL表转置,求高手”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2817373.html

相关图片

相关文章