Возвращение строк в SQL, где нет кредита или дебета. GL Activity - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь написать запрос sql, который покажет строку для всех 12 финансовых периодов, а не только со значениями. На приведенном ниже снимке экрана Microsoft Query показано то, что я вижу в данный момент, на основе приведенного ниже снимка экрана SQL Query. В настоящее время я возвращаю только строки для FiscalPeriods 1,3,4,5,6,7,8. Чего я хочу добиться, так это вернуть строки для 1,2,3,4,5,6,7,8,9,10,11,12.

Я бы предположил, что в настоящее время он возвращает только строки для 1, 3, 4, 5, 6, 7, 8, потому что в этих полях есть значения либо в полях дебетовой суммы, либо в сумме кредита, и нет значений для других полей в этих столбцах.

Может кто-нибудь написать, пожалуйста, sql запрос, который я бы использовал, чтобы я мог вернуть все строки для 1,2,3,4,5,6,7,8,9,10,11,12 со значениями «0» в столбцах дебитовой суммы и кредитной суммы, где есть нет значений?

Microsoft Query
Microsoft Query

SQL Запрос
SQL Query

Ответы [ 2 ]

0 голосов
/ 15 марта 2020

Вам просто нужно LEFT JOIN. Первая «таблица» - это список периодов, которые вы хотите; второй ваш существующий запрос:

WITH q AS (
      <your query here>
     )
SELECT q.FiscalYear, q.FiscalPeriod,       
       COALESCE(q.CreditAmount, 0) AS CreditAmount,
       . . .
FROM (VALUES ('2020', '01'), ('2020', '02'), ('2020', '03'), ('2020', '04'),
              ('2020', '05'), ('2020', '06'), ('2020', '07'), ('2020', '08'),
              ('2020', '09'), ('2020', '10'), ('2020', '11'), ('2020', '12')
     ) v(FiscalYear, FiscalPeriod)
     ON v.FiscalYear = q.FiscalYear AND
        v.FiscalPeriod = q.FiscalPeriod
 ORDER BY 1, 2
0 голосов
/ 15 марта 2020

Сделайте FULL JOIN для таблицы со всеми периодами, например для встроенной таблицы VALUES, и используйте COALESCE(...) для заполнения отсутствующих данных значениями по умолчанию.

См. SQL Fiddle для полной демонстрации.

SELECT COALESCE(t.FiscalYear, v.FiscalYear) AS FiscalYear
     , COALESCE(t.FiscalPeriod, v.FiscalPeriod) AS FiscalPeriod
     , COALESCE(t.CreditAmount, 0) AS CreditAmount
  FROM MyTable t
  FULL JOIN ( VALUES ('2020', '01'), ('2020', '02'), ('2020', '03'), ('2020', '04')
                   , ('2020', '05'), ('2020', '06'), ('2020', '07'), ('2020', '08')
                   , ('2020', '09'), ('2020', '10'), ('2020', '11'), ('2020', '12')
            ) AS v (FiscalYear, FiscalPeriod)
              ON v.FiscalYear = t.FiscalYear
             AND v.FiscalPeriod = t.FiscalPeriod
 ORDER BY 1, 2

Выход

FiscalYear  FiscalPeriod  CreditAmount
2020        01            94
2020        02            0
2020        03            142.9
2020        04            1681.5
2020        05            5826.26
2020        06            5978.99
2020        07            4401.37
2020        08            6784.09
2020        09            0
2020        10            0
2020        11            0
2020        12            0
...