0

我从 DB2 获取数据时遇到问题。我想按客户汇总发票金额。在一个字段中,(计算 - 我称之为 InvoicedThisYear)它计算出今年开具的发票,而在另一个领域,它计算出上一年开具的发票(计算,我称之为 InvoicedLastYear)。但是,正如总结的那样,我已按客户对其进行分组,但它也需要按 InvoiceYear 分组的数据,因此我必须将其包含在分组中。我的问题是在我的结果中,我现在在没有数据和重复的年份中为零,例如:

Cust     InvoicedThisYear   InvoiceLastYear
abc          0                 100
abc          100                0

理想情况下我希望看到

Cust   InvoicedThisYear     InvoicedLastYear
abc        100                  100

这是我的代码:

SELECT 
   Cust AS Customer,
   (CASE WHEN InvoiceYear = Year(Current Date) THEN sum(InvoiceAmt)ELSE 0 END) as InvoicedThisYear,
   (CASE WHEN InvoiceYear = year(Current Date)-1 THEN sum(InvoiceAmt)ELSE 0 END) as InvoicedLastYear
FROM 
    InvHead
GROUP BY 
   Cust, 
   InvoiceYear
HAVING
   ((CASE WHEN InvoiceYear = Year(Current Date) THEN sum(InvoiceAmt)ELSE 0 END)<>0)
   OR
   ((CASE WHEN InvoiceYear = year(Current Date)-1 THEN sum(InvoiceAmt)ELSE 0 END)<>0)
ORDER BY 
   Cust

我怎样才能得到想要的结果?如果我删除 groupby Invoice Year,查询将不会运行

作为大小说明,它可以在 MS Access 中使用,无需按发票年份分组!

谢谢,

迈克尔

4

1 回答 1

3

您需要将SUM()case 语句放在周围:

SELECT 
   Cust AS Customer,
   sum(CASE WHEN InvoiceYear = Year(Current Date) THEN InvoiceAmt ELSE 0 END) as InvoicedThisYear,
   sum(CASE WHEN InvoiceYear = year(Current Date)-1 THEN InvoiceAmt ELSE 0 END) as InvoicedLastYear
FROM 
    InvHead
GROUP BY 
   Cust
ORDER BY 
   Cust
于 2013-06-28T17:40:22.447 回答