动态SQL里面变量代替字符串问题

战斗牙刷 2018-06-21 11:33:38
我想做一个将表横列变成纵列的过程,原始表格式tb1(进度1,进度2,进度3分别代表1日,2日,3日 )如下:
铸件号 进度1 进度2 进度3
AAAA 50 100 200
BBBB 10 20 30
……………………
想变成tb2纵向模式
铸件号 日期 日数量
AAAA 进度1 50
AAAA 进度2 100
AAAA 进度3 200
BBBB 进度1 10
BBBB 进度2 20
BBBB 进度3 30
…………………………
现使用的动态SQL语句如下:

declare @zd varchar(10),@zzdd varchar(10),@str varchar(100)
set @zd='进度1'
set @str='select 铸件号,日期=@zd,日数量='+@zd+' from tqf_生产定单计划'
exec(@str)

问题:总是不明白 日期=@zd 传成 日期='进度1' 这一步怎么完成,无法达到生成tb2的效果 ,后面那个 日数量=进度1 可以正常实现取对应铸件号进度1的数量
...全文
381 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ekun_sky 2018-07-21
  • 打赏
  • 举报
回复
with a(铸件号,进度1,进度2,进度3) as(
select 'AAAA',50,100,200 union all
select 'BBBB',10,20,30)


select 铸件号,日期,日数量 from a unpivot(日数量 for 日期 in (进度1,进度2,进度3)) as b
heping091101 2018-06-21
  • 打赏
  • 举报
回复
declare @zd varchar(10),@zzdd varchar(10),@str varchar(100)
set @zd='进度1'
set @str='select 铸件号,日期='''+convert(varchar(10),@zd)+''',日数量=进度2 from tqf_生产定单计划'
exec(@str)
shinger126 2018-06-21
  • 打赏
  • 举报
回复
DECLARE @str VARCHAR(MAX)
SET @str=STUFF((SELECT 'union all select 铸件号,日期='''+name+''',日数量='+name +' from tb1 '
FROM syscolumns WHERE OBJECT_NAME(id)='tb1' AND name LIKE '进度%' FOR XML PATH('')),1,10,'')
EXEC(@str)
二月十六 版主 2018-06-21
  • 打赏
  • 举报
回复
战斗牙刷 2018-06-21
  • 打赏
  • 举报
回复
已经搞定了 ,需要三个单引号

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧