Sql server 2012 案例陈述无效问题
每当我试图对来自同一列的数据使用case语句时,总是会遇到空值问题。 数据库中的数据: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
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函数要使用(预算和累积预算),所以它变得更加复杂。你认为你能帮助我根据我发布的错误查询创建透视代码吗?谢谢