Sql Server 中 PIVOT在mysql 中的實現


sql server 中項目代碼:

select isnull(MI線,0) as F_MIValue,isnull(SMT線,0) as F_SMTValue,isnull(空壓站,0) as F_ChangePre,
        isnull(Repair線,0) as F_RepairValue,isnull(Assembly線,0) as F_AssemblyValue
        from (select F_Name,CONVERT(decimal(16,2),sum(F_Value)) as F_Value from EnergyValue 
        where F_Name like '%MI%' or F_Name like '%SMT%'or F_Name like '%Repair%' or F_Name like '%Assembly%' or F_Name = '空壓站'
        group by F_Name) aa 
    pivot(max(F_Value)for F_Name in(MI線,SMT線,空壓站,Repair線,Assembly線))a

而類似下面

 PIVOT (MAX (F_ZZ_BaseValue) FOR F_Flag IN (F, S)) AS S ;
# Mysql不支持PIVOT函數進行行列轉換,故需要通過sql語句進行轉換。

 

實現代碼如下:

CREATE TEMPORARY TABLE IF NOT EXISTS T_TmpPivot
(
    select F_Name,CONVERT(sum(F_Value),decimal(16,2)) as F_Value from EnergyValue 
        where F_Name like '%MI%' or F_Name like '%SMT%'or F_Name like '%Repair%' or F_Name like '%Assembly%' or F_Name = '空壓站'
        group by F_Name
);

select ifnull(MI線,0) as F_MIValue,ifnull(SMT線,0) as F_SMTValue,ifnull(空壓站,0) as F_ChangePre,
ifnull(Repair線,0) as F_RepairValue,ifnull(Assembly線,0) as F_AssemblyValue
from(
    SELECT MAX(MI線) AS MI線,MAX(SMT線) AS SMT線,MAX(空壓站) AS 空壓站,MAX(Repair線) AS Repair線,MAX(Assembly線) AS Assembly線 FROM
    (
     SELECT 
            CASE F_Name WHEN 'MI線' THEN F_Value END AS MI線,
            CASE F_Name WHEN 'SMT線' THEN F_Value END AS SMT線,
            CASE F_Name WHEN '空壓站' THEN F_Value END AS 空壓站,
            CASE F_Name WHEN 'Repair線' THEN F_Value END AS Repair線,
            CASE F_Name WHEN 'Assembly線' THEN F_Value END AS Assembly線
            FROM T_TmpPivot 
    ) AS tmp

) AS T;


DROP TEMPORARY TABLE IF EXISTS T_TmpPivot;

 


免責聲明!

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



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