2010-10-22 5 views
-3

J'essaie de calculer les articles vendus 90 jours avant 01/06/2009 et 90 jours après 01/06/2009 avec la requête ci-dessous. ça montre une erreur. Est-ce que quelqu'un voudrait m'éduquer s'il vous plaît?Calculer les dates

SELECT 
location,      
SUM((CASE WHEN t.order_date DATEADD (DAY, -90, '6/1/2009') THEN t.Item ELSE NULL END) as Prior_Items, 
SUM(CASE WHEN t.order_date DATEADD (DAY, 89, '6/1/2009') THEN t.Item ELSE NULL END) as Post_Items 
ELSE NULL 
END) 
FROM mytable t 
where date = '6/1/2009' 
group by location 
+2

* Une erreur * - "J'ai fait quelque chose à cette chose et maintenant le thingamajig est cassé." Veuillez être plus précis, quelle erreur avez-vous eu? – Piskvor

+0

@Chris: Prenez soin de partager avec nous ce qu'est une "erreur"? Cela sauverait quelqu'un d'essayer de déterminer quelle est l'erreur avant de devoir déterminer la solution. –

+0

Quel genre d'erreur vous donne? Avez-vous manqué le> et

Répondre

2

Je suppose que vous voulez quelque chose comme ça.

DECLARE @d DATETIME 

SET @d = '20090106' 


SELECT 
location,      
SUM(CASE WHEN t.order_date < @d and t.order_date > DATEADD (DAY, -90, @d) THEN t.Item END) as Prior_Items, 
SUM(CASE WHEN t.order_date >[email protected] AND t.order_date < DATEADD (DAY, 89, @d) THEN t.Item END) as Post_Items 
FROM mytable t 
where t.order_date BETWEEN DATEADD (DAY, -90, @d) AND DATEADD (DAY, 89, @d) 
group by location 
+0

Est-ce que 'ELSE NULL' est vraiment nécessaire? Je crois que 'CASE' a par défaut' ELSE NULL' – a1ex07

+0

@ a1ex07 - Vous avez raison, ce n'est pas nécessaire. Supprimé –

6

votre condition WHEN n'est pas correctement formée.

CASE WHEN t.order_date DATEADD (DAY, -90, '6/1/2009') THEN t.Item ELSE NULL END 
      ^^^^^^^^^^^^^^^^^^^^ 

plus probable que vous voulez quelque chose comme:

CASE WHEN t.order_date>=DATEADD (DAY, -90, '6/1/2009') THEN t.Item ELSE NULL END 
         ^^ 
Questions connexes