首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Sum和Case的MySQL

问使用Sum和Case的MySQL
EN

Stack Overflow用户
提问于 2013-10-23 07:00:49
回答 1查看 60.9K关注 0票数 20

我正在尝试使用连接到MySQL数据库的ASP.NET创建一个GridView。数据如下所示。

代码语言:javascript
复制
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

根据上面的记录,我希望结果如下所示

代码语言:javascript
复制
BusinessUnit  TodaysOrders   ThisMonthsOrders  ThisYearsOrders
UnitA              0                1                2
UnitB              2                3                3

我当前的代码如下所示。它给了我错误(关于DatabaseName.sum的一些东西不存在。请查看函数名称解析和解析部分...)

代码语言:javascript
复制
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 

代码继续

代码语言:javascript
复制
FROM OrderTable WHERE OrderTable.Canceled. <> 'Y';

Sum Case是这里最好的用法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-23 07:11:56

该错误是由函数名和圆括号之间的空格引起的

代码语言:javascript
复制
SUM (CASE WHEN ...
   ^^

阅读更多Function Name Parsing and Resolution

试一试

代码语言:javascript
复制
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

这是演示

票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19529864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档