SQL 动态行转列

DECLARE @cmdText    VARCHAR(8000);
SET @cmdText = 'SELECT CommandNo,LotNum,WaferID,ProberNO,TestTime,isnull(Version,'''') as Version,SyncDateTime,Lastupdatetime,Model,' + CHAR(20);

select @cmdText =
@cmdText + ' CASE wld11 WHEN ''' + wld11 + ''' THEN WLD1  END AS '''+'WLD1' +'('+ wld11+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(wld11,'') as WLD11 FROM #tmp ) as T
select @cmdText =
@cmdText + ' CASE wld22 WHEN ''' + wld22 + ''' THEN WLD2  END AS '''+'WLD2' +'('+ wld22+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(wld22,'') as WLD22 FROM #tmp ) as T
select @cmdText =
@cmdText + ' CASE wld33 WHEN ''' + wld33 + ''' THEN WLD3  END AS '''+'WLD3' +'('+ wld33+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(wld33,'') as WLD33 FROM #tmp ) as T
select @cmdText =
@cmdText + ' CASE wld44 WHEN ''' + wld44 + ''' THEN WLD4  END AS '''+'WLD4' +'('+ wld44+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(wld44,'') as WLD44 FROM #tmp ) as T
select @cmdText =
@cmdText + ' CASE wld55 WHEN ''' + wld55 + ''' THEN WLD5  END AS '''+'WLD5' +'('+ wld55+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(wld55,'') as WLD55 FROM #tmp ) as T
select @cmdText =
@cmdText + ' CASE wld66 WHEN ''' + wld66 + ''' THEN WLD6  END AS '''+'WLD6' +'('+ wld66+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(wld66,'') as WLD66 FROM #tmp ) as T
select @cmdText =
@cmdText + ' CASE wld77 WHEN ''' + wld77 + ''' THEN WLD7  END AS '''+'WLD7' +'('+ wld77+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(wld77,'') as WLD77 FROM #tmp ) as T


SELECT @cmdText =
@cmdText + ' CASE lop221 WHEN ''' + lop211 + ''' THEN lop21  END AS '''+'LOP21' +'('+ lop211+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(lop211,'21') as lop211 FROM #tmp ) as T
SELECT @cmdText =
@cmdText + ' CASE lop221 WHEN ''' + lop221 + ''' THEN lop22  END AS '''+'LOP22' +'('+ lop221+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(lop221,'22') as lop221 FROM #tmp ) as T
SELECT @cmdText =
@cmdText + ' CASE lop231 WHEN ''' + lop231 + ''' THEN lop23  END AS '''+'LOP23' +'('+ lop231+')'+ ''','+  CHAR(10)  FROM (SELECT DISTINCT isnull(lop231,'23') as lop231  FROM #tmp ) as T
SELECT @cmdText =
@cmdText + ' CASE lop241 WHEN ''' + lop241 + ''' THEN lop24  END AS '''+'LOP24' +'('+ lop241+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(lop241,'24') as lop241  FROM #tmp ) as T

SELECT @cmdText =
@cmdText + ' CASE VF111 WHEN ''' + VF111 + ''' THEN VF11  END AS '''+'VF11' +'('+ VF111+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(VF111,'VF11') as VF111 FROM #tmp ) as T
SELECT @cmdText =
@cmdText + ' CASE VF121 WHEN ''' + VF121 + ''' THEN VF12  END AS '''+'VF12' +'('+ VF121+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(VF121,'VF12') as VF121 FROM #tmp ) as T
SELECT @cmdText =
@cmdText + ' CASE VF131 WHEN ''' + VF131 + ''' THEN VF13  END AS '''+'VF13' +'('+ VF131+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(VF131,'VF13') as VF131 FROM #tmp ) as T
SELECT @cmdText =
@cmdText + ' CASE VF141 WHEN ''' + VF141 + ''' THEN VF14  END AS '''+'VF14' +'('+ VF141+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(VF141,'VF14') as VF141 FROM #tmp ) as T
SELECT @cmdText =
@cmdText + ' CASE VF151 WHEN ''' + VF151 + ''' THEN VF15  END AS '''+'VF15' +'('+ VF151+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(VF151,'VF15') as VF151 FROM #tmp ) as T
SELECT @cmdText =
@cmdText + ' CASE VF161 WHEN ''' + VF161 + ''' THEN VF16  END AS '''+'VF16' +'('+ VF161+')'+ ''',' + CHAR(10)  FROM (SELECT DISTINCT isnull(VF161,'VF16') as VF161 FROM #tmp ) as T

SELECT @cmdText =
@cmdText + 'StdWld,StdLop2,StdVf1,StdWlp1,AvgWld,AvgLop2,AvgVf1,AvgVf4,AvgWlp1,Yield,XMLVersion'','

SET @cmdText = LEFT(@cmdText, LEN(@cmdText) -2) --注意这里,如果没有加CHAR(10) 则用LEFT(@cmdText, LEN(@cmdText) -1)
SET @cmdText = @cmdText + ' FROM #tmp ';
PRINT @cmdText
EXECUTE (@cmdText);



转换前:

转换后:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大飞奶爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值