Sql server 2012 案例陈述无效问题

Sql server 2012 案例陈述无效问题,sql-server-2012,Sql Server 2012,每当我试图对来自同一列的数据使用case语句时,总是会遇到空值问题。 数据库中的数据: 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

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

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)。有什么建议吗?
谢谢。

对于所需的结果类型,您似乎应该使用它而不是大小写。

您是否将
大小写
表达式包装为聚合,如
MAX()
?从
分组依据
列表(以及从
排序依据
中删除
结束日期时间
)。你不是按你正在聚合的东西进行分组!这会删除所有的空值并只生成一行而不是3行吗?如果我不按EndDateTime排序,它不会按月份对结果排序。请您将表dbo.budget结构/列添加到问题中,以便其他人更容易理解您的要求?准确地说。Pivot是我想用的。那么您认为空值问题是因为case语句而出现的吗?Pivot可以消除这个问题,对吧?我想是的。当您使用case语句时,它仍然会返回总行数,在本例中是三行,但是由于您只解析出需要使用case的数据,因此它只是用NULL填充未使用的单元格。PIVOT的设计似乎非常适合处理这种情况。是的,我需要习惯PIVOT。然而,在pivot中使用月份并没有变得复杂。然后我有两个aggr函数要使用(预算和累积预算),所以它变得更加复杂。你认为你能帮助我根据我发布的错误查询创建透视代码吗?谢谢