MySql不支持Sqlserver的Pivot函数,求帮忙行转列

MySql 码拜 8年前 (2017-05-06) 3649次浏览
  /****** Script for SelectTopNRows command from SSMS  ******/
SELECT S.*, D.ADMOH,D.PROH 
FROM E85_STATIONERYLIST S,
(SELECT NAME, SUM([ADMOH]) AS ADMOH,SUM([PROH]) AS PROH 
FROM (
SELECT A.NAME,sum(B.Quantity) AS OH,"ADMOH" AS TYPE,"ADMPN" AS PN  
FROM E85_StationeryList A LEFT JOIN [RR_SubInvOnHand_Current] B 
ON B.Part = A.PARTNO_ADM 
GROUP BY A.NAME
UNION 
SELECT A.NAME,SUM(B.Quantity) AS OH,"PROH" AS TYPE,"PRPN" AS PN  
FROM E85_StationeryList A LEFT JOIN [RR_SubInvOnHand_Current] B 
ON B.Part = A.PARTNO_PR 
GROUP BY A.NAME
) AS C
PIVOT (
 SUM(OH) 
 FOR TYPE IN (
  [ADMOH],
  [PROH]
 )
) AS P
GROUP BY NAME 
) AS D
WHERE S.NAME = D.NAME
ORDER BY S.ID

各位看官,帮忙把下面的sqlserver的语句改成Mysql可以执行的,原因是Mysql不支持Pivot

解决方案

20

e.g.

SELECT  S.* ,
        T1.ADMOH ,
        T2.PROH
FROM    E85_STATIONERYLIST S
        LEFT JOIN ( SELECT  A.NAME ,
                            SUM(B.Quantity) AS ADMOH
                    FROM    E85_StationeryList A
                            LEFT JOIN [RR_SubInvOnHand_Current] B ON B.Part = A.PARTNO_ADM
                    GROUP BY A.NAME
                  ) AS T1 ON T1.NAME = S.NAME
        LEFT JOIN ( SELECT  A.NAME ,
                            SUM(B.Quantity) AS PROH
                    FROM    E85_StationeryList A
                            LEFT JOIN [RR_SubInvOnHand_Current] B ON B.Part = A.PARTNO_PR
                    GROUP BY A.NAME
                  ) AS T2 ON T2.NAME = S.NAME
WHERE   T1.NAME IS NOT NULL
        OR T2.NAME IS NOT NULL
ORDER BY S.ID;

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明MySql不支持Sqlserver的Pivot函数,求帮忙行转列
喜欢 (0)
[1034331897@qq.com]
分享 (0)