Search code examples
mysqlsql-serverselectcasetemporary

Having multiple cases in a select


I have a problem in where I have to convert the following MSSQL to MySQL. I have two main issues.

  1. "#WU" is a temporary table that doesn't work. I try to replace it with CREATE TEMPORARY TABLE WU but it errors out without an explanation.
  2. I want to know is the correct way to call the multiple cases.

I've tried removing the MAX, and switching changing them to WU1 = (CASE WHEN rk = 1 THEN WU END), but that doesn't work.

The code is as follows:

SELECT ReqN,
MAX(CASE WHEN rk = 1 THEN WU END) AS WU1,
MAX(CASE WHEN rk = 2 THEN WU END) AS WU2,
MAX(CASE WHEN rk = 3 THEN WU END) AS WU3,
MAX(CASE WHEN rk = 4 THEN WU END) AS WU4,
MAX(CASE WHEN rk = 5 THEN WU END) AS WU5,
MAX(CASE WHEN rk = 6 THEN WU END) AS WU6,
MAX(CASE WHEN rk = 7 THEN WU END) AS WU7,
MAX(CASE WHEN rk = 8 THEN WU END) AS WU8

into #tblWU

FROM (SELECT ReqN, WUnit,
   (SELECT COUNT(*) 
    FROM tblDevWU AS B
    WHERE B.ReqN = A.ReqN
    AND B.WUnit <= A.WUnit) AS rk
    FROM tblDevWU AS A) as A 
    GROUP BY ReqN;

Solution

  • Mysql equivalent for this is:

    CREATE TEMPORARY TABLE tblWU AS
    SELECT ReqN,
    MAX(IF(rk=1, WU, NULL)) WU1,
    MAX(IF(rk=2, WU, NULL)) WU2,
    MAX(IF(rk=3, WU, NULL)) WU3,
    MAX(IF(rk=4, WU, NULL)) WU4,
    MAX(IF(rk=5, WU, NULL)) WU5,
    MAX(IF(rk=6, WU, NULL)) WU6,
    MAX(IF(rk=7, WU, NULL)) WU7,
    MAX(IF(rk=8, WU, NULL)) WU8
    FROM (
       SELECT ReqN, WUnit,
          (
           SELECT COUNT(*) FROM tblDevWU AS B
           WHERE B.ReqN = A.ReqN AND B.WUnit <= A.WUnit
          ) AS rk
       FROM tblDevWU AS A) as A 
    GROUP BY ReqN;