mssql 动态行转列实战

这是一个SQL存储过程,用于统计大宗原材料在指定日期范围内的价格变化趋势。通过动态生成SQL查询,按材料名称聚合每日价格,并展示价格变化。输入参数包括起始日期、结束日期和使用组织ID。

原数据

 

结果

/*==============================================================================  
// 存储过程: dbo.C_SP_Analysis_MattextChangetrend  
//------------------------------------------------------------------------------  
// 描述:   
//   大宗原材料变化趋势统计  
//------------------------------------------------------------------------------  
// 参数:  
   
//------------------------------------------------------------------------------  
// 返回值:  @code char(1) -返回是否成功  -1错误 , 0失败 ,1成功  
//------------------------------------------------------------------------------  
// 作者:cxh  日期: 2021-01-27 10:54:34  
//------------------------------------------------------------------------------  
// 修改历史:   
//       
//------------------------------------------------------------------------------  
//==============================================================================*/  
alter PROCEDURE C_SP_Analysis_MattextChangetrend  
    @sdate VARCHAR(10),@edate VARCHAR(10),@useorg_id VARCHAR(10)  
AS  
BEGIN  
   SET NOCOUNT ON  
     
   BEGIN TRY  
     DECLARE @msg  nvarchar(100)  
     DECLARE @code  char(1)  
       
 --    DECLARE @sdate VARCHAR(10)='2020-01-01'  
 --DECLARE @edate VARCHAR(10)='2021-01-24'  
 --DECLARE @useorg_id VARCHAR(10) ='362139'  
 DECLARE @sql VARCHAR(1000)  
 -- 动态行列  
 SET @sql='select material_name'  
 SELECT @sql=@sql+',max(case CONVERT(VARCHAR(10),quotetime,23) when '''+ CONVERT(VARCHAR(10),quotetime,23)   
  + ''' then cast(adjust_price as int) else 0 end) ['+RIGHT(CONVERT(VARCHAR(10),quotetime,112),4)+']'  
 FROM (SELECT DISTINCT quotetime FROM material_baseprice_srcweb WHERE quotetime BETWEEN '' + @sdate + '' AND '' + @edate + '')a     
   
 SET @sql=@sql+' from (select * from material_baseprice_srcweb  WHERE quotetime BETWEEN '''  
     + @sdate + ''' AND ''' + @edate + '''  and useorg_id = '   
     + @useorg_id + ' ) b group by material_name'  
    
 exec(@sql)  
  END TRY  
  BEGIN CATCH  
    select   
   error_message() as msg,  
   -1 as code  
  END CATCH  
       
  SET NOCOUNT OFF  
END;      

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值