在子查询中使用count并获取错误

时间:2010-12-07 11:31:47

标签: sql sql-server-2005 tsql

我在表格中有逐行数据,我需要扣除销售的取消并生成一个关于方案标识符的报告分组。即我需要找到所有销售额并减去所有取消产品以产生净销售额。

我正在尝试使用下面的查询,但我收到错误。

select insscheme, ((select count(quote_id) where (sale = '1')) - (select count(quote_id) where cancellation = '1')) as sales from policys group by insscheme order by insscheme

我收到了错误

Column 'policys.Sale' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

此处不需要任何子查询。只需使用COUNTCASE

SELECT   insscheme,
         COUNT(CASE WHEN sale = '1' AND cancellation <> '1' THEN 1 END) AS sales
FROM     policys
GROUP BY insscheme
ORDER BY insscheme

我在上面假设cancellation不可为空。如果是使用

COUNT(CASE WHEN sale = '1' THEN 1 END) -  
COUNT(CASE WHEN cancellation = '1' THEN 1 END) AS sales 

答案 1 :(得分:0)

也许这可行。

select  insscheme, SUM(sale) - SUM(cancellation) as NetSales
from    policys
group by insscheme

我没有看到quote_id列与您的查询有什么关系。你在查询一张桌子还是几张桌子?如果您可以通过对表格布局的简短讨论向我们展示您的模式,那将会有所帮助。