我对这个计算子句有问题。
语句是一个简单的选择。
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年药品销售的年份。还算出了毒品的数量和平均销量。
发布于 2013-05-26 17:50:01
我认为COMPUTE可以应用于SELECT子句中的列,因此您必须定义别名并使用它们:
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 BY与COMPUTE结合起来并不容易)之后,也许您应该删除GROUP BY
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
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测试。
发布于 2013-05-26 15:05:12
您需要使你的条款匹配,所以请尝试:
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或者类似的,我会给你一个确切的答案,但需要更多的细节。
https://stackoverflow.com/questions/16760467
复制相似问题