J'ai un tableau qui enregistre les ventes et je veux un rapport sur combien d'impôt a été payé sur chaque élément. La règle de base est que toutes les ventes avant le 1er avril ont une taxe de 0,52%, toutes les ventes après cette date auront une taxe de 0,5%.SQL Server: appliquer différents multiplicateurs par date
J'essaie d'obtenir cela en utilisant la requête suivante
select ItemCode,
sum(Quantity) QuantitySold,
WhsCode as Store,
case when (docdate < '20170401') then sum(Quantity * .0052) else sum(Quantity * .005) end as Tax
from SalesTable
group by whscode,
itemcode
Cependant je reçois un
datedoc » est invalide dans la liste de sélection, car il ne figure pas dans soit un agrégat fonction ou la clause GROUP BY.
erreur si je l'exécute tel quel. L'ajout de DocDate à la clause group by crée un désordre de doublons (dans un exemple, je suis passé de 185 lignes à 1508 lignes).
SQL ne vous permet tout simplement pas d'utiliser les instructions WHEN
dont le conditionnel n'est pas inclus dans la clause Group ou devrais-je utiliser autre chose?
Il est bizarre que vous appliquez la taxe à la 'quantity' au lieu d'un total des ventes de' quantité * price'. Je ne dis pas que c'est faux, il semble juste étrange de le voir écrit de cette façon. – SqlZim
Oups, vous avez raison, je l'ai mélangé avec une taxe différente par article plat - Il devrait être sur le prix, pas la quantité. – ConnorU