SQL 列转行和动态用时间生数据列

1.源数据

SELECT *
FROM #OrderPlanPrint;

2.列转行后的数据

SELECT tt.订单号,
       tt.物料代码,
       tt.物料名称,
       tt.物料规格,
       tt.订单数量,
       tt.生产计划,
       tt.TODAY,
       tt.开始时间
       INTO #OrderPlanPrint1
FROM #OrderPlanPrint
    UNPIVOT
    (
        TODAY
        FOR 生产计划 IN (数量, 派工号)
    ) tt;

    SELECT *
FROM #OrderPlanPrint1;

3.用循环生成时间列

-------------------------------------------------------------------------------------
declare @starttime datetime,@endtime datetime,@sql varchar(2000)
 
set @starttime = CONVERT(VARCHAR(100), GETDATE(), 23);--起始时间
set @endtime = CONVERT(VARCHAR(100), GETDATE() + 7, 23);--结束时间
set @sql = 'SELECT * ';--需要查询什么字段在这里拼装
 
while @starttime < @endtime
begin
  set @sql = @sql +', CASE WHEN 开始时间='''+Convert(Varchar(100),@starttime,23)+''' THEN TODAY END AS '+''''+Convert(Varchar(100),@starttime,23)+''''
  SET @starttime = @starttime+1
END
 set @sql = @sql+' from #OrderPlanPrint1'--其他查询条件在这里拼装
exec(@sql) --执行SQL
 
print @sql --打印SQL 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值