2010-12-07 27 views
3

J'ai des données ligne par ligne dans un tableau et j'ai besoin de net d'annulations de ventes et de produire un groupe de rapports sur un identifiant de schéma. Je dois trouver toutes les ventes et soustraire tous les cancellatsion pour obtenir un chiffre d'affaires net. J'essaye d'employer la question ci-dessous mais j'obtiens des erreurs.utiliser count dans une sous-requête et obtenir des erreurs

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

et je reçois l'erreur

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

Quelqu'un peut-il me aider avec ça?

+0

Vos sous-requêtes ne disent pas de quelle table elles proviennent. Je suppose que policys [sic]. –

+0

oui, ils viennent tous de la même table. –

+0

Quels sont les types de données 'sale' et' cancellation'? –

Répondre

1

Vous n'avez pas besoin de sous-requêtes ici. Il suffit d'utiliser COUNT et CASE. J'ai supposé ci-dessus que cancellation n'est pas Nullable. Si c'est l'usage

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

c'est exactement ce dont on a besoin. Merci beaucoup. –

0

Peut-être que cela pourrait fonctionner.

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

Je ne vois pas ce que la colonne quote_id doit faire avec votre requête. Est-ce que vous interrogez une ou plusieurs tables? Il serait utile si vous pouviez nous montrer à quoi ressemble votre schéma avec une brève discussion de la disposition de votre table.

+0

la vente et l'annulation sont en fait un nvarchar déposé en raison de problèmes d'importation, mais il peut être possible pour moi de changer cela en un nueric afin que je puisse les résumer. Merci beaucoup pour votre aide. –