【发布时间】:2018-09-01 22:59:11
【问题描述】:
我正在尝试在满足条件时计算字段。我已经玩了几个小时了,但没有运气:(。
所以我需要找到并计算每个月的保证金。我这样做是为了销售,这很简单
SUM(CASE when CalendarMonth = 1 then TotalSales else 0 end) as 'January',
但是,在尝试计算保证金时,我经常会遇到错误 '无法对包含聚合或子查询的表达式执行聚合函数。'
我是不是走错了路?
Declare @Sales numeric, @Cost numeric, @Margin Numeric
Set @Sales = (Select SUM(TotalSales)
From SalesAnalysis2)
Set @Cost = (Select SUM(TotalCost)
From SalesAnalysis2)
Set @Margin = ((@Sales - @Cost) / @Sales)
Select distinct
Case CalendarMonth when 1 then @Margin else 0 end as 'January',
Case CalendarMonth when 2 then @Margin else 0 end as 'Febuary',
Case CalendarMonth when 3 then @Margin else 0 end as 'March',
Case CalendarMonth when 4 then @Margin else 0 end as 'April',
Case CalendarMonth when 5 then @Margin else 0 end as 'May',
Case CalendarMonth when 6 then @Margin else 0 end as 'June',
Case CalendarMonth when 7 then @Margin else 0 end as 'July',
Case CalendarMonth when 8 then @Margin else 0 end as 'August',
Case CalendarMonth when 9 then @Margin else 0 end as 'September',
Case CalendarMonth when 10 then @Margin else 0 end as 'Octocber',
Case CalendarMonth when 11 then @Margin else 0 end as 'November',
Case CalendarMonth when 12 then @Margin else 0 end as 'December'
From SalesAnalysis2
where CustomerID = 2829 and BranchID = 0 and CalendarYear = Year(Getdate())
这是我做的销售,我需要使用相同的格式来显示利润。 但是同一张表中没有margin字段,需要计算 Sales Example
【问题讨论】:
-
所以你想为每个月显示相同的保证金值?
-
我看不出你提供的
SUM有什么问题,CASE;所以我不认为这是问题所在。例如,这很好用:SELECT SUM(CASE WHEN Object_ID % 2 = 0 THEN 1 ELSE 0 END) FROM sys.tables;你尝试过的完整查询是什么? -
研究使用
Pivotstackoverflow.com/a/7146009/468973 -
哪一行抛出了这个错误。我无法相信查询会引发该错误。即使它没有出错,你为什么要每个月都使用相同的@Margin?
-
嘿,对不起,我解释得不好,我上面显示的查询返回底部附加的图像,(全0)我试过玩这个但经常出错!但是是的,我需要显示每个月的保证金
标签: sql sql-server