欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

两次行转列的sql写法

更新时间: 2014-01-05 02:18:25 责任编辑: Author_N1

 

求一个两次行转列的sql写法


CREATE TABLE [dbo].[t1](
','[Code] [nvarchar](30) NULL,
','[Stype] [nvarchar](20) NULL,
','[Dtype] [nvarchar](20) NOT NULL,
','[DValue] [nvarchar](40) NULL
) ON [PRIMARY]

/*
CODE:款号
Stype:样品类型
Dtype:样品进度
DValue:时间值

Stype的值 

100 初样
200 尺寸样
300 产前样
400 销售样
500 船样

Dtype的值 

10 资料接收时间
20 交付版房时间
30 领料时间
40 预计交样时间
50 实际完成时间
*/

INSERT INTO T1
SELECT '12303','100','10','4-19' UNION ALL
SELECT '12303','100','20','4-19' UNION ALL
SELECT '12303','100','40','4-26' UNION ALL
SELECT '12303','200','10','4-19' UNION ALL
SELECT '12303','200','20','4-19' UNION ALL
SELECT '12303','200','40','4-26' UNION ALL
SELECT '12303','200','10','5-2' UNION ALL
SELECT '12303','200','30','5-11' UNION ALL
SELECT '12303','200','50','5-13' UNION ALL
SELECT '12303','300','10','5-6' UNION ALL
SELECT '12303','300','20','5-12' UNION ALL
SELECT '12303','300','50','5-14' UNION ALL
SELECT '12303','400','10','5-8' UNION ALL
SELECT '12303','400','30','5-15' UNION ALL
SELECT '12303','400','50','5-17' UNION ALL
SELECT '12303','500','10','5-15'

--我想要的结果是




--参考方法--
距我了解貌似纯SQL搞不了两层,一层是没问题的
--参考方法--
引用:
先谢谢了,一小时后我就可以电脑上网了


这样吗:

CREATE TABLE [dbo].[t1](
[Code] [nvarchar](30) NULL,
[Stype] [nvarchar](20) NULL,
[Dtype] [nvarchar](20) NOT NULL,
[DValue] [nvarchar](40) NULL


INSERT INTO T1
SELECT '12303','100','10','4-19' UNION ALL
SELECT '12303','100','20','4-19' UNION ALL
SELECT '12303','100','40','4-26' UNION ALL
SELECT '12303','200','10','4-19' UNION ALL
SELECT '12303','200','20','4-19' UNION ALL
SELECT '12303','200','40','4-26' UNION ALL
SELECT '12303','200','10','5-2' UNION ALL
SELECT '12303','200','30','5-11' UNION ALL
SELECT '12303','200','50','5-13' UNION ALL
SELECT '12303','300','10','5-6' UNION ALL
SELECT '12303','300','20','5-12' UNION ALL
SELECT '12303','300','50','5-14' UNION ALL
SELECT '12303','400','10','5-8' UNION ALL
SELECT '12303','400','30','5-15' UNION ALL
SELECT '12303','400','50','5-17' UNION ALL
SELECT '12303','500','10','5-15'
go


declare @sql nvarchar(4000)

set @sql = ''



select @sql = @sql + ',max(case when stype = '''+stype+
              ''' and dtype='''+Dtype+''' then Dvalue else null end) '+
              stype_v+'_'+Dtype_v
from 
(
select Stype,
       case Stype when  '100' then '初样'
  when  '200' then '尺寸样'
  when  '300' then '产前样'
  when  '400' then '销售样'
  when  '500' then '船样'
   end as stype_v,
   
       Dtype,
       case Dtype when '10' then '资料接收时间'
  when '20' then '交付版房时间'
  when '30' then '领料时间'
  when '40' then '预计交样时间'
  when '50' then '实际完成时间'
       end as Dtype_v        
from 
(
select distinct Stype 
from t1
)t1
inner join 
(
select distinct Dtype
from t1
)t2
 on 1=1
)t

select @sql = 'select code as 款号'+@sql + 
              ' from t1 group by code'
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:18:25
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8299/
本文WWW.DOC100.NET DOC100.NET版权所有。