日期:2014-05-17 浏览次数:20683 次
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + num from (SELECT CONVERT(VARCHAR,ROW_NUMBER() OVER(PARTITION BY 模具代码 ORDER BY 产品名称 )) AS num,* FROM dbo.TB)t group BY num
set @sql = '[' + @sql + ']'
exec ('select * from (select * from (SELECT CONVERT(VARCHAR,ROW_NUMBER() OVER(PARTITION BY 模具代码 ORDER BY 产品名称 )) AS num,* FROM dbo.TB)T) a pivot (max(产品名称) for num in (' + @sql + ')) b')
/*
模具代码 模具名称 1 2
S1113 PTB-403端子备模 PTB-403F-端子 PTB-403-端子
S1114 PTB-405端子(备模) PTB-405F-端子 PTB-405-端子*/
--CREATE TABLE test (模具代码 VARCHAR(10), 模具名称 VARCHAR(20),产品名称 VARCHAR(20))
--INSERT INTO test
--SELECT 'S1113','PTB-403端子备模','PTB-403F-端子'
--UNION ALL
--SELECT 'S1113','PTB-403端子备模','PTB-403-端子'
--UNION ALL
--SELECT 'S1114','PTB-405端子(备模)','PTB-405F-端子'
--UNION ALL
--SELECT 'S1114','PTB-405端子(备模)','PTB-405-端子'
declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+'产品名称'+CASE WHEN ROW_NUMBER()OVER(ORDER BY GETDATE())=1 THEN 'A' ELSE 'B' END +'=max(case when [模具名称]='+quotename([模具名称],'''')+' then [产品名称] else ''0'' end)'
from test group BY [模具名称]
exec('select [模具代码],[模具名称]'+@s+' from test group by [模具代码],[模具名称]')
/*
模具代码 模具名称 产品名称A 产品名称B
---------- -------------------- -------------------- --------------------
S1113 PTB-403端子备模 PTB-403-端子 0
S1114 PTB-405端子(备模) 0 PTB-405-端子
*/