2009-11-23 2 views
0

Recherche d'une requête sql conditionnelle. Mon formatage est incorrect. Aucune suggestion? Toute aide serait appréciée.aide SQL conditionnelle

Select misc, 

    SUM(IF(processdate BETWEEN '2009-08-01 00:00:00.000' AND '2009-10-31 23:59:00.000', getskusold.sprice, NULL)) AS totalprice_date1, 
    SUM(IF(processdate BETWEEN '2009-11-01 00:00:00.000' AND '2009-12-31 23:59:00.000', getskusold.sprice, NULL)) AS totalprice_date2 

from 
misc_table 

Répondre

2

plutôt essayer en utilisant une déclaration de cas

Select misc, 

     SUM(CASE WHEN processdate BETWEEN '2009-08-01 00:00:00.000' AND '2009-10-31 23:59:00.000' THEN getskusold.sprice ELSE 0 END) AS totalprice_date1, 
     SUM(CASE WHEN processdate BETWEEN '2009-11-01 00:00:00.000' AND '2009-12-31 23:59:00.000' THEN getskusold.sprice ELSE 0 END) AS totalprice_date2 

    from 
    misc_table 
GROUP BY misc 
2
  1. Vous ne pouvez pas résumer en utilisant NULL, NULL est pas numérique. Utilisez 0 à la place.

  2. Ne pas utiliser IF. Exemple d'utilisation:

    SUM (CAS QUAND PROCESSDATE ENTRE '2009-08-01 00: 00: 00.000' ET '2009-10-31 23: 59: 00.000' ALORS getskusold.sprice ELSE 0 FIN)

+0

Votre code a une syntaxe incorrecte: doit être « CAS QUAND PROCESSDATE ENTRE ... » au lieu de « CAS PROCESSDATE QUAND ENTRE ... » – Alex

+0

Bonne prise. Fixé. –

+0

SELECT NULL AS barre INTO #foo FROM sys.columns: quel type de données est la barre? – gbn