22

MySQL データベースに接続する ASP.NET を使用して GridView を作成しようとしています。以下のようなデータが表示されます。

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

上記の記録に基づいて、結果を以下のように表示したいと思います

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

私の現在のコードは以下です。エラーが発生しています(DatabaseName.sumに関する何かが存在しません。関数名の解析と解決のセクションを確認してください...)

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 

コードは続く

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

ここでは Sum Case が最適な使い方ですか?

4

1 に答える 1

42

エラーは、関数名と括弧の間のスペースが原因です

SUM (CASE WHEN ...
   ^^

関数名の解析と解決

試す

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

これがSQLFiddleのデモです

于 2013-10-22T23:11:56.280 に答える