订单号码 产品编号 产品名称 生产制令单号 订单数量 单位 计划生产日期 计划生产数量
GW20191127 22108004 保护膜 PL191127003 3000 pcs 2019-12-20 1000
GW20191127 22108004 保护膜 PL191127003 3000 pcs 2019-12-21 1000
GW20191127 22108004 保护膜 PL191127003 3000 pcs 2019-12-22 1000
GW20191127 22030014 双面胶 PL191130008 2000 pcs 2019-12-20 1000
GW20191127 22030014 双面胶 PL191130008 2000 pcs 2019-12-23 1000
下面是我写的代码,但是执行后达不到我想要的效果,如果我将计划生产日期设置为日期型,就会报错
declare @sql varchar(8000)
set @sql = 'select 生产制令单号 '
select @sql = @sql + ' , max(case 计划生产日期 when ''' + 计划生产日期 + ''' then 计划生产数量 else 0 end) [' + 计划生产日期 + ']'
from (select distinct 计划生产日期 from 生产计划表) as a
set @sql = @sql + ' from 生产计划表 group by 生产制令单号'
set @sql='create view v_course as ' + @sql
print @sql exec(@sql)
go
SELECT * FROM V_COURSE
首先,在你的代码中,你应该将生产制令单号也作为一个 distinct 的列,因为你要将每一个制令单号对应的日期和数量都列成一行。其次,如果你将计划生产日期设置为日期型,你需要将它用 CONVERT 转换成字符串形式,然后再对字符串进行操作。最后,你在代码中出现了 "from 生产计划表",但没有给出表的别名,因此也会导致错误。
下面是修正后的代码:
declare @sql varchar(8000)
set @sql = 'select 生产制令单号 '
select @sql = @sql + ' , max(case CONVERT(varchar,计划生产日期,120) when ''' + CONVERT(varchar,计划生产日期,120) + ''' then 计划生产数量 else 0 end) [' + CONVERT(varchar,计划生产日期,120) + ']'
from (select distinct 生产制令单号, 计划生产日期 from 生产计划表) as a
set @sql = @sql + ' from 生产计划表 group by 生产制令单号'
set @sql='create view v_course as ' + @sql
print @sql exec(@sql)
go
SELECT * FROM V_COURSE
希望能对你有所帮助!