【问题标题】:Returning rows in SQL where there is no credit or debit GL Activity返回 SQL 中没有贷方或借方 GL 活动的行
【发布时间】:2020-03-15 05:16:15
【问题描述】:

我正在尝试编写一个 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 查询,以便我可以返回值为“0”的 1、2、3、4、5、6、7、8、9、10、11、12 的所有行在没有值的借方金额和贷方金额列中?

Microsoft Query

SQL 查询

【问题讨论】:

标签: sql sql-server accounting


【解决方案1】:

对包含所有句点的表格执行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

【讨论】:

    【解决方案2】:

    您只需要一个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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多