У меня есть запрос, который я получил из базы данных доступа, которую я пытаюсь написать в postgreSQL. У меня проблемы с переводом этой строки iif(isNull(table2.salaried), 0, table2.salaried) - iif(isNull(table1.paymet_due), 0, table1.paymet_due) AS salary_due в PostgreSQL. Первое, что меня смущает, это - в запросе. Что это значит? Как я могу преобразовать эту строку в PostgreSQL?

SELECT
   * 
FROM
   (
      SELECT
         table1."customer_id",
         iif(isNull(table2.salaried), 0, table2.salaried) - iif(isNull(table1.paymet_due), 0, table1.paymet_due) AS salary_due 
       --coalesce(table1.paymet_due, 0) AS salary_due

      FROM
         (
            SELECT
               tbl_archive."customer_id",
               SUM(tbl_sent."grand_total_paymet_due") AS paymet_due 
            FROM
               tbl_sent 
               LEFT JOIN
                  tbl_archive 
                  ON tbl_sent."npi" = tbl_archive."cust_badge_numb" 
         )
         AS table1 
         LEFT JOIN
            (
               SELECT
                  tbl_archive."customer_id",
                  SUM(wage."Amount") AS salaried 
               FROM
                  wage 
                  LEFT JOIN
                     tbl_archive 
                     ON wage."sum_amount" = tbl_archive."cust_badge_numb" 
            )
            AS table2 
            ON table1."customer_id" = table2."customer_id"
   )
   AS tbl_salaried
0
taji01 21 Апр 2020 в 07:40

2 ответа

Лучший ответ

Это простое вычитание:

  • Значение A равно 0, если table2.salaried равно NULL, в противном случае это table2.salaried.

  • Значение B равно 0, если table1.paymetdue равно NULL, в противном случае это table1.paymetdue.

И значение, показанное в запросе, является значением A минус значение B.

Таким образом, правильный перевод будет

coalesce(table2.salaried, 0) - coalesce(table1.paymet_due, 0)
2
Laurenz Albe 21 Апр 2020 в 06:11

Вы можете использовать функцию coalesce, которая возвращает первый ненулевой аргумент.

Например:

coalesce(field1,field2,0) - will return field 1 unless it's null. If field1 is null, it will return field2 unless it's null. If both field1 and field2 are null, it will return 0.

В вашем случае вы можете использовать: coalesce(table2.salaried, 0) вместо iif(isNull(table2.salaried), 0, table2.salaried)

Что касается -, это действительно зависит от того, числовые поля или даты.

  • Для числовых - вы можете оставить - как есть.
  • Для дат - вы должны знать, что конкретно вы хотите извлечь - количество дней / месяцев / и т.д. между датами ...
1
Gabip 21 Апр 2020 в 06:18