Anonymous
Anonymous

Reputation: 1

i have been struck on this conversion

I have to convert this from MySQL to PostgreSQL:

IF(
   IF(
      MT.SLIPTYPE=8,
      SUM(MT1.TOTAL),
      0-SUM(MT1.TOTAL)
   ) IS NULL,
   0.00,
   IF(
      MT.SLIPTYPE=8,
      SUM(MT1.TOTAL),
      0-SUM(MT1.TOTAL)
   )
) AS Totalcamp

to a CASE statement. Can anyone help me?

I have tried like this, but it was not accepted:

case when MT.SLIPTYPE = 8 
    then
    case when sum(MT1.TOTAL) is null then 0.00 else sum(MT1.TOTAL) end
    else
    case when (0 - sum(MT1.TOTAL)) is null then 0.00 else (0-SUM(MT1.TOTAL)) end
end as TOTALSCHEME

Upvotes: 0

Views: 33

Answers (1)

Laurenz Albe
Laurenz Albe

Reputation: 246523

That should be straightforward:

CASE WHEN CASE WHEN MT.SLIPTYPE = 8
               THEN SUM(MT1.TOTAL)
               ELSE 0 - SUM(MT1.TOTAL)
          END IS NULL
     THEN 0.00
     ELSE CASE WHEN MT.SLIPTYPE = 8
               THEN SUM(MT1.TOTAL)
               ELSE 0 - SUM(MT1.TOTAL)
          END
END) AS Totalcamp

But it could be simplified considerably:

coalesce(
   CASE WHEN MT.SLIPTYPE = 8
        THEN SUM(MT1.TOTAL)
        ELSE 0 - SUM(MT1.TOTAL)
   END,
   0.0
)

Upvotes: 1

Related Questions