案例陈述无效问题

时间:2015-04-30 00:49:29

标签: sql-server-2012

每当我尝试对来自同一列的数据使用case语句时,我总是会遇到null值问题。 数据库中的数据:

Month   Sum
Jan     1000
Feb     2000
Mar     3000

期望的结果:

Jan    Feb     Mar
1000   2000    3000

当我尝试使用case语句时,我遇到了null问题,并得到如下结果:

Jan      Feb      Mar
1000     Null     Null
Null     2000     Null
Null     Null     3000

以下是创建空值问题的代码。

select AccountID,
sum(Case when DATEPART(month,EndDateTime) = 10 then Budget End) period1,
sum(case when DATEPART(month,EndDateTime) = 11 then Budget end) period2,
sum(case  when DATEPART(month,EndDateTime) = 12 then Budget End) period3,
Description,
from Budget
where DATEPART(month,EndDateTime) in ('10','11','12')
group by AccountID,Description,EndDateTime
order by AccountID,Description,EndDateTime;

使用Pivot功能,我能够生成所需的结果。

SELECT
    AccountID,
    [1] AS Jan,
    [2] AS Feb,
    [3] AS Mar,
    [4] AS Apr,
    [5] AS May,
    [6] AS Jun,
    [7] AS Jul,
    [8] AS Aug,
    [9] AS Sep,
    [10] AS Oct,
    [11] AS Nov,
    [12] AS Dec
FROM
(Select 
AccountID,
Budget,
 MONTH(EndDateTime) as TMonth
  from
    dbo.Budget) source
PIVOT
(
    SUM(Budget)
    FOR TMonth
    IN ( [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12] )
) AS pvtMonth

我现在面临的当前问题是我需要再添加一个sum函数Sum(BudgetNet)。有什么建议? 感谢。

1 个答案:

答案 0 :(得分:0)

对于您想要的结果类型,看起来您应该使用PIVOT而不是CASE。