“Sum”函数的使用

starryfood 2012-03-23 05:01:51
存储过程如下:

ALTER proc [dbo].[Sp_GetWaterData]
@DAYear char(4),
@DAMonth char(2)
as
if @DAMonth is null
select r.RegionName , sum(t.SumQty) as SumQty, YearMonth from tjshuru as t inner join Region as r on t.RegionNo=r.RegionNo where t.YearMonth like (@DAYear+'%') and t.EnergyType='WM'
else
select r.RegionName , t.SumQty as SumQty, YearMonth from tjshuru as t inner join Region as r on t.RegionNo=r.RegionNo where t.YearMonth=(@DAYear+@DAMonth) and t.EnergyType='WM'

问题:“sum(t.SumQty)”提示错误,信息如下:
消息 8120,级别 16,状态 1,过程 Sp_GetWaterData,第 6 行
选择列表中的列 'Region.RegionName' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

怎样根据“where t.YearMonth like (@DAYear+'%')”来对“t.SumQty”求和?
...全文
229 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
starrycheng 2012-05-14
  • 打赏
  • 举报
回复
聚合函数要和“GroupBy”一起使用,关于存储过程的优化要注意什么呢???比如,减少运算次数等等。。。
starryprof 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

同济的啊!
[/Quote]

Yes...
tangxu12 2012-04-16
  • 打赏
  • 举报
回复
同济的啊!
starryprof 2012-04-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

用 SUM(...) OVER (PARTITION BY ......)
[/Quote]

“Over”作用是什么嘞?
  • 打赏
  • 举报
回复
按条件进行分组。

select r.RegionName , sum(t.SumQty) as SumQty, YearMonth from tjshuru as t inner join Region as r on t.RegionNo=r.RegionNo group by r.RegionName , YearMonth having t.YearMonth like (@DAYear+'%') and t.EnergyType='WM' 试试。
youzelin 2012-03-28
  • 打赏
  • 举报
回复
用 SUM(...) OVER (PARTITION BY ......)
starryprof 2012-03-23
  • 打赏
  • 举报
回复
left(YearMonth,4)
cnwin 2012-03-23
  • 打赏
  • 举报
回复
“YearMonth”是“2009”开头的记录作为数据删选条件,Group By RegionName,YearMonth
cnwin 2012-03-23
  • 打赏
  • 举报
回复
“YearMonth”是“2009”开头的记录作为数据删选条件,Group By RegionName
starrycheng 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wellbeingzhang 的回复:]

因为你用了聚合函数sum,所以其他的列也要聚合或者分组一下。
select r.RegionName , sum(t.SumQty) as SumQty, YearMonth from tjshuru as t inner join Region as r on t.RegionNo=r.RegionNo where t.YearMonth like (@DAYear+'%') and t.E……
[/Quote]

效果如下图:


如何对“YearMonth”是“2009”开头的记录,求“SumQty”的和?
觉悟之时 2012-03-23
  • 打赏
  • 举报
回复
因为你用了聚合函数sum,所以其他的列也要聚合或者分组一下。
select r.RegionName , sum(t.SumQty) as SumQty, YearMonth from tjshuru as t inner join Region as r on t.RegionNo=r.RegionNo where t.YearMonth like (@DAYear+'%') and t.EnergyType='WM' 改成
select r.RegionName , sum(t.SumQty) as SumQty, YearMonth from tjshuru as t inner join Region as r on t.RegionNo=r.RegionNo group by r.RegionName , YearMonth having t.YearMonth like (@DAYear+'%') and t.EnergyType='WM' 试试。
bdmh 2012-03-23
  • 打赏
  • 举报
回复
你没有group by,按r.RegionName,YearMonth 汇总

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧