Sql 動態行轉列 pivot


 

最近朋友有個需求:將產品中為“期刊”的書品以行轉列的形式展現,同時需要關聯工單主表及工單明細表,顯示內容為,工單號、操作日期、產品名稱及數量,由於期刊的產品數量較多,靜態的雖然可以實現,但不利於后續內容的添加,就想着如何能以動態的形式展現,自動拼接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值得問題,如有能解決的朋友,歡迎留言,非常感謝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM