码迷,mamicode.com
首页 > 数据库 > 详细

Sql 动态行转列 pivot

时间:2019-08-30 00:00:58      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:显示   如何   ant   inf   color   资料   tco   procedure   HERE   

 

最近朋友有个需求:将产品中为“期刊”的书品以行转列的形式展现,同时需要关联工单主表及工单明细表,显示内容为,工单号、操作日期、产品名称及数量,由于期刊的产品数量较多,静态的虽然可以实现,但不利于后续内容的添加,就想着如何能以动态的形式展现,自动拼接sql语句处理,具体实现过程如下。

 产品信息表需用到的字段内容:

select ProductCode,Name  from ComProduct where ProductType =20

技术图片

 

工单需要用到的内容:

select JobNo,ProductCode,Quantity  from WmsJobDtl 

技术图片

 通过搜索资料,终于完成动态拼接SQL语句,具体的存储过程如下:

CREATE PROCEDURE 期刊核算汇总表

as 
begin


DECLARE @sql VARCHAR(8000)
DECLARE @COLUMN VARCHAR(8000)
 
SELECT @sql= ISNULL(@sql+,,‘‘)+ [+ProductName+]
    ,@COLUMN= ISNULL(@COLUMN,‘‘)+, +ProductName 


FROM (select wj.JobNo ,wj.StockDate, a.ProductName ,sum(wjd.Quantity) as TQty   from 
(select ProductCode,  Name as ProductName  
from ComProduct   where  ProductType =20 ) as a 
inner  join  WmsJobDtl wjd on a.ProductCode = wjd.ProductCode
inner join WmsJob  wj on wj.JobNo = wjd.JobNo
where wj.Status = X  
group by wj.JobNo ,wj.StockDate, a.ProductName) as cc 
GROUP BY ProductName           
 
SET @sql= select  *  from
(select wj.JobNo ,wj.StockDate, a.ProductName ,sum(wjd.Quantity) as TQty   from 
(select ProductCode,  Name as ProductName  
from ComProduct   where  ProductType =‘‘20‘‘ ) as a 
inner  join  WmsJobDtl wjd on a.ProductCode = wjd.ProductCode
inner join WmsJob  wj on wj.JobNo = wjd.JobNo
where wj.Status = ‘‘X‘‘  
group by wj.JobNo ,wj.StockDate, a.ProductName
) as  dddd  pivot (max(TQty) for ProductName in (+@sql+))a 
exec   (@sql)

end

技术图片

 

可惜,没有解决NULL值得问题,如有能解决的朋友,欢迎留言,非常感谢。

 

Sql 动态行转列 pivot

标签:显示   如何   ant   inf   color   资料   tco   procedure   HERE   

原文地址:https://www.cnblogs.com/sbjl/p/11432358.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!