一、第一种

  原数据表

  Mysql postgresql 行列转换

  转换后

  Mysql postgresql 行列转换

DROP TABLE IF EXISTS tempdynamic;
CREATE  TEMPORARY TABLE tempdynamic (
 SELECT p.fsPaymentName,sr.fsPaymentId,sh.fsShiftName,SUM(sr.fdReceMoney) as AmtTotal FROM tbsell as s
INNER JOIN tbSellReceive as sr ON s.fsSellNo=sr.fsSellNo AND s.fsShopGUID=sr.fsShopGUID
INNER JOIN tbpayment as p  on  sr.fsPaymentId =p.fsPaymentId  and p.fsShopGUID=s.fsShopGUID and  p.fiStatus=1
INNER JOIN tbSellCheck as sc on sc.fsSellNo=s.fsSellNo AND s.fsShopGUID=sc.fsShopGUID
INNER JOIN tbshift as sh ON sc.fsShiftId=sh.fsShiftId AND sh.fiStatus=1
WHERE s.fiBillStatus=3
AND s.fsShopGUID='c5f0d5c9d8b349f493c180bcc22d9ce0'
AND s.fsSellDate='2016-01-15'
GROUP BY sr.fsPaymentId,sc.fsShiftId);

SET @EE='';
set @str_tmp='';
 
SELECT   @EE:=CONCAT(@EE,'SUM(IF(fsShiftName=\'',fsShiftName,'\'',',AmtTotal,0)) AS ',fsShiftName,',') as aa into @str_tmp
FROM (
 SELECT DISTINCT fsShiftName from  tempdynamic   
) A order by length(aa) desc limit 1;

 
SET @QQ=CONCAT('SELECT  ifnull(fsPaymentName,\'total\') as 科目名称 ,',@str_tmp,' SUM(AmtTotal)  as 合计 FROM tempdynamic Group by fsPaymentName  WITH ROLLUP');
 
PREPARE stmt  FROM @QQ; 
EXECUTE stmt ;
deallocate prepare stmt;
View Code

相关文章: