首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2008中的按子句错误计算

Server 2008中的按子句错误计算
EN

Stack Overflow用户
提问于 2013-05-26 14:59:20
回答 2查看 1.3K关注 0票数 0

我对这个计算子句有问题。

语句是一个简单的选择。

代码语言:javascript
复制
Select 
    col1, sum(col2) 
from 
    table1 t1
join
    table2 t2 on t1.col1=t2.col1
where 
    year(t1.coldate) = 2012
Group by 
    col1
order by 
    col1
Compute 
    Sum(col2), avg(col2) by col1

我一直收到的错误信息是

Msg 411,第16级,状态1,第1行 计算子句#1,聚合表达式#1不在选择列表中。

这是我的完整代码木琴

我想要显示的是TransactionID和TotalMedicine (从销售药品的数量)2012年药品销售的年份。还算出了毒品的数量和平均销量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-26 17:50:01

我认为COMPUTE可以应用于SELECT子句中的列,因此您必须定义别名并使用它们:

代码语言:javascript
复制
Select 
    col1, sum(col2) AS sum_col2                  --- alias
...

Compute 
    Sum(sum_col2), avg(sum_col2) by col1 ;       --- using the alias

我不确定您是否需要by col1,因为您已经按该列进行了分组。如果您想要sum_col2的总和和平均值,请从COMPUTE中删除by col1

另一个(与您的问题无关)问题是where year(t1.coldate) = 2012条件,它不是易懂。我使用这个where coldate >= '20120101' and coldate < '20130101',这样就可以在coldate上使用索引了。所有更改后的查询

..。在您的评论和一些实验(这让人认为将GROUP BYCOMPUTE结合起来并不容易)之后,也许您应该删除GROUP BY

代码语言:javascript
复制
Select 
    t1.col1, col2
from 
    table1 t1
join
    table2 t2 on t1.col1 = t2.col1
where 
    coldate >= '20120101' and coldate < '20130101'
order by 
    col1
Compute 
    Sum(col2), Avg(col2)  by col1                 -- for every col1
Compute 
    Sum(col2), Avg(col2)                          -- and overall
  ;  

正如@Bogdan正确评论的那样,COMPUTE被废弃了,您应该使用GROUP BY GROUPING SETS

代码语言:javascript
复制
Select 
    t1.col1, 
    SUM(col2) AS TotalMedicine,
    AVG(col2) AS AverageMedicine
from 
    table1 t1
join
    table2 t2 on t1.col1 = t2.col1
where 
    coldate >= '20120101' and coldate < '20130101'
Group By Grouping Sets
    ( (col1),
      ()
    )
  ;

参见SQL-Fiddle测试。

票数 3
EN

Stack Overflow用户

发布于 2013-05-26 15:05:12

您需要使你的条款匹配,所以请尝试:

代码语言:javascript
复制
Select 
    col2, sum(col2)  
from 
    table1 t1 
join 
    table2 t2 on t1.col1 = t2.col1 
where 
    year(t1.coldate) = 2012 
Group by 
    col1 
order by
    col1 
Compute 
    Sum(col2), avg(col2) by col1

或者类似的,我会给你一个确切的答案,但需要更多的细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16760467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档