我使用以下声明:
SELECT
Number As [ACCOUNT NUMBER],
SUM(CASE WHEN [Paid_Pmt_Dt] >= '05/01/2014'
AND[Paid_Pmt_Dt] <= '05/31/2014' AND [Total_Pmt_Amt] > '0' THEN Total_Pmt_Amt End) [MAY],
SUM(CASE WHEN [Paid_Pmt_Dt] >= '06/01/2014'
AND[Paid_Pmt_Dt] <= '06/30/2014' AND [Total_Pmt_Amt] > '0' THEN Total_Pmt_Amt End) [JUNE]
FROM Gross_Pmt
GROUP BY Number
在某些情况下,两个月中的任何一个都没有付款 - 在这些情况下,我在两个月都看到了NULL。如果两个月都为NULL,有没有办法在不显示记录时发生这种情况?
答案 0 :(得分:0)
SELECT
Number As [ACCOUNT NUMBER],
SUM(CASE
WHEN
[Paid_Pmt_Dt] >= '05/01/2014' AND
[Paid_Pmt_Dt] <= '05/31/2014' AND
[Total_Pmt_Amt] > '0'
THEN Total_Pmt_Amt
END) [MAY],
SUM(CASE
WHEN
[Paid_Pmt_Dt] >= '06/01/2014' AND
[Paid_Pmt_Dt] <= '06/30/2014' AND
[Total_Pmt_Amt] > '0'
THEN Total_Pmt_Amt
END) [JUNE]
FROM Gross_Pmt
WHERE Paid_Pmt_Dt >= '05/01/2014' AND Paid_Pmt_Dt <= '6/30/2014'
GROUP BY Number
答案 1 :(得分:0)
有三种方法可以解决这个问题:
选项1.更有效,更容易编码。将此WHERE子句添加到查询中:
...
FROM ...
WHERE Paid_Pmt_Dt BETWEEN '05/01/2014' AND '06/30/2014'
GROUP BY ...
答案 2 :(得分:0)
将月份和年份添加到group by子句
SELECT Number [ACCOUNT NUMBER],YEAR([Paid_Dmt_Dt]) YYYY,MONTH([Paid_Dmt_Dt]) MM,SUM(Total_Pmt_Amt) GrossTotal
FROM Gross_Pmt
GROUP BY Number, YEAR([Paid_Dmt_Dt]),MONTH([Paid_Dmt_Dt])
默认情况下,这会消除空月。您也不需要[Total_Pmt_Amt] > '0'
。
这将每个月返回一行,但我认为您可以将此作为PIVOT的基础或使用此解决方案。
答案 3 :(得分:0)
如果我理解正确,你只想过滤两个计算列都返回NULL的行:
SELECT *
FROM
(
SELECT
Number As [ACCOUNT NUMBER],
SUM(CASE WHEN [Paid_Pmt_Dt] >= '05/01/2014'
AND[Paid_Pmt_Dt] <= '05/31/2014' AND [Total_Pmt_Amt] > '0' THEN Total_Pmt_Amt End) [MAY],
SUM(CASE WHEN [Paid_Pmt_Dt] >= '06/01/2014'
AND[Paid_Pmt_Dt] <= '06/30/2014' AND [Total_Pmt_Amt] > '0' THEN Total_Pmt_Amt End)
FROM Gross_Pmt
GROUP BY Number
) as dt
WHERE [MAY] IS NOT NULL OR [JUNE] IS NOT NULL