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;
