2013-10-22 47 views
7

我想创建一个与ASP.NET连接到MySQL数据库的GridView。数据如下所示。MySQL使用总结和案例

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情况下,最好使用这里?

+0

你的背景总和(壳体)按预期好,但根据Peterm的间隔答案可能是您的问题......(但是,取消取消后的期限。在<>'Y'之前) – DRapp

回答

12

错误是由函数名和括号之间的空间

SUM (CASE WHEN ... 
    ^^ 

阅读造成了更多Function Name Parsing and Resolution

尝试

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演示