2013-10-22 14 views
7

Ich versuche, ein GridView mit ASP.NET Verbindung zu einer MySQL-Datenbank zu erstellen. Die Daten erscheinen wie folgt.MySQL mit Sum und Case

BusinessUnit OrderDate  Canceled 
UnitA   1/15/2013   N 
UnitA   10/1/2013   N 
UnitB   10/15/2013   N 
UnitB   10/22/2013   N 
UnitB   10/22/2013   N 

oben auf den Aufzeichnungen Basierend, würde Ich mag das Ergebnis wie erscheinen unter

BusinessUnit TodaysOrders ThisMonthsOrders ThisYearsOrders 
UnitA    0    1    2 
UnitB    2    3    3 

Meine aktuellen Code ist unten. Es gibt mir Fehler (etwas über DatabaseName.sum existiert nicht. Überprüfen Sie die Funktion Name Analyse und Auflösung‘Abschnitt ...)

Select 
    SUM (CASE WHEN (OrderDate)=DATE(NOW()) THEN 1 ELSE 0 END) AS TodaysOrders, 
    SUM (CASE WHEN YEAR(OrderDate) = YEAR(CURDATE()) AND MONTH(OrderDate) = MONTH(CURDATE()) THEN 1 ELSE 0 END) AS ThisMonthsOrders, 
    SUM (CASE WHEN YEAR(main_order_managers.creation_date) = YEAR(CURDATE()) THEN 1 ELSE 0 END) AS ThisYearsOrders 

Code

FROM OrderTable WHERE OrderTable.Canceled. <> 'Y'; 

Ist Sum Fall die beste Verwendung weiter Hier?

+0

Ihr Kontext verursacht wird Summe (Fall) ist in Ordnung, wie beabsichtigt, aber pro Peterm Antwort auf Abstand kann Ihr Problem sein ... (jedoch entfernen Sie den Zeitraum nach dem Abbrechen. vor dem <> 'Y') – DRapp

Antwort

12

Der Fehler, der durch den Raum zwischen Funktionsnamen und Klammern

SUM (CASE WHEN ... 
    ^^ 

Lesen Sie mehr Function Name Parsing and Resolution

Versuchen

SELECT BusinessUnit, 
     SUM(CASE WHEN OrderDate = CURDATE() THEN 1 ELSE 0 END) TodaysOrders, 
     SUM(CASE WHEN DATE_FORMAT(OrderDate, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m') THEN 1 ELSE 0 END) ThisMonthsOrders, 
     SUM(CASE WHEN YEAR(OrderDate) = YEAR(CURDATE()) THEN 1 ELSE 0 END) ThisYearsOrders 
    FROM OrderTable 
WHERE Canceled <> 'Y' 
GROUP BY BusinessUnit 

Hier ist SQLFiddle Demo