2010-12-07 6 views
3

私はテーブル内に行単位のデータを格納しています。私はsalesからの取り消しをネストし、スキーム識別子でレポートをグループ化する必要があります。つまり、すべての売上を見つけ、純売上高を生産するためにすべての取消を引く必要があります。サブクエリでカウントを使用してエラーを取得する

以下のクエリを使用しようとしていますが、エラーが発生しています。

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.

は、誰もがこれで私を助けることができるのエラーを取得していますか?

+0

あなたのサブクエリは、どのテーブルから来たものかを言いません。私はpolicys [sic]を仮定しています。 –

+0

はい、すべて同じテーブルから来ています。 –

+0

'sale'と' cancellation'はどんなデータ型ですか? –

答えて

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はNULL可能ではありません。それが使用されている場合

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

これはまさに必要なものです。どうもありがとう。 –

0

おそらく、これが動作する可能性があります。

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

私はquote_id列がクエリに関係しているか見ていません。 1つまたは複数のテーブルをクエリしていますか?テーブルレイアウトの簡単な説明で、スキーマがどのようになっているかを示すことができれば助かります。

+0

実際には輸入の問題でnvarcharが申告していますが、これをヌーレに変更して合計することは可能かもしれません。ご協力いただき誠にありがとうございます。 –

関連する問題