SQL语句不产生任何结果

时间:2014-05-14 20:04:55

标签: php sql syntax syntax-error

SELECT 
    ID AS Employee_Name,
    department AS Employee_Department,
    business_unit AS Employee_Business,
    SUM(hours_used) Employee_Hours
FROM 
    TableX
WHERE
    Day_Used BETWEEN 04/01/2014 AND 04/30/2014
GROUP BY
    department

这是我当前的SQL语句,我尝试做的是从数据库中获取输出但是我没有成功,也许你们可以指出原因。

目标是按部门汇总所有员工小时数,并在给定日期之间按部门对其进行分组。我知道我的声明现在不会显示这些信息,我目前只是想弄清楚为什么我无法获得任何输出。

谢谢你的时间!

编辑:以下是一个更简单的测试查询,可以使用SUM(hours_used)正常工作。

   SELECT
       ID AS Employee_Name,
       SUM(hours_used) AS Employee_Hours
   FROM
       TableX
   WHERE
       Day_Used BETWEEN 04/01/2014 AND 04/30/2014
   GROUP BY
       ID

我非常感谢您的所有反馈!这是我原来的SQL问题到目前为止的样子。我只需要弄清楚如何按部门将其转换为SUM(hours_used)。 ( IE: Ted会计15小时,公司X 10小时)

SELECT 
    ID AS Employee_Name,
    department AS Employee_Department,
    business_unit AS Employee_Business,
    SUM(hours_used) AS Employee_Hours
FROM 
    TableX
WHERE
    Day_Used BETWEEN '04/01/2014' AND '04/30/2014'
GROUP BY
    ID, department, business_unit, hours_used

Pecci无意中解决了我的最后一个问题!我只需删除GROUP BY中的hours_used,并显示所有内容!我非常感谢所有帮助解决问题的人,非常感谢!!!

3 个答案:

答案 0 :(得分:1)

您没有聚合函数或group by语句中的所有字段。

SELECT 
    ID AS Employee_Name,
    department AS Employee_Department,
    business_unit AS Employee_Business,
    SUM(hours_used) Employee_Hours
FROM 
    TableX
WHERE
    Day_Used BETWEEN '04/01/2014' AND '04/30/2014'
GROUP BY
    ID,department,business_unit

将其他列添加为聚合(SUM, COUNT, ETC)或GROUP BY的原因是因为数据的查看方式。

说你有下表

ID   intValue  Color
1    1         Blue
2    2         Blue
3    5         Green
4    10        Red
5    15        Red
6    5         Blue

我希望按颜色获得所有intValue的总和。

我想首先确保选择两列SELECT intValue, Color FROM table1

现在,既然我想要intValue的总和,我会添加聚合函数 SELECT SUM(intValue), Color FROM table1

现在,您遇到的问题就在这里。没有告诉DBMS您想要分组的内容(本例中的颜色)它还知道怎么回事?通过添加一个组,我告诉它我想要SUM所有intValue的Color分组在SELECT SUM(intValue), Color FROM table。 {{1}}

如果没有在所有列上执行聚合或组,则DBMS不知道如何处理查询。

答案 1 :(得分:0)

当您使用SUM,COUNT ...时,您需要将所有其他列放在组中。 另一件要看的是日期是如何存储在数据库中的,以及你是否正确使用了这些日期。

答案 2 :(得分:0)

主要问题是日期常数:

SELECT ID AS Employee_Name,
       department AS Employee_Department,
       business_unit AS Employee_Business,
       SUM(hours_used) as Employee_Hours
FROM TableX
WHERE Day_Used BETWEEN '2014-04-01' AND '2014-04-30'
GROUP BY id, department, business_unit;

大多数数据库都会识别日期常量的ISO标准YYYY-MM-DD格式。您的特定数据库可能有另一种首选格式,但常量值确实需要在单引号之间。