2012-09-17 73 views
0

有问题所以我之前问过这样一个问题,我想我只是不明白答案(尽管答案奏效),将答案输入到下一个问题SUM查询...再次遇到

简单查询。我在拉雇员,日期,总计。从时间卡计划PER雇员中抽出。我正在寻找的是totalhrs colum的总和,但也显示所有的时间卡的提交。因此,代码我现在用

SELECT date,totalhrs,SUM(totalhrs) 
FROM tcardsubmit 
WHERE employee= 'employee name' 
ORDER BY date 

这个代码显示

|EMPLOYEE | DATE  | TOTALHRS | SUM(TOTALHRS) 
| myname | myfirstdate |  5 |  10 

我希望它显示什么是所有特定员工已经进入了考勤卡。不只是一个链接。因此,在'myname'中,我会有3个时间卡,其中SUM实际上等于一周提交的10个小时。这个总和适用于数学。我似乎无法让它显示员工输入的所有时间卡。以下是我希望它看起来像

|EMPLOYEE | DATE   | TOTALHRS | SUM(TOTALHRS) 
| myname | myfirstdate |  5 |  10 
| myname | myseconddate |  4 |  10 
| myname | mythirddate |  1 |  10 

回答

2

测试这一点,看看这对你的作品:

SELECT 
    date, 
    totalhrs, 
    (SELECT SUM(b.totalhrs) FROM tcardsubmit b WHERE b.employee = a.employee) AS totalhrs_sum 
FROM 
    tcardsubmit a 
WHERE 
    employee = 'employee name' 
ORDER BY 
    date 

解释其中的子条款中进行选择: 在子选择其中,CL ause,我们正在检查只获取与主选择员工具有相同员工的记录(b.employee = a.employee),因此SUM(b.totalhrs)将只是您正在获取其记录的员工的记录总和。在主要选择中,我们说FROM Tcardsubmit a,所以我们将主要的tcardsubmit命名为a,并在子选择中我们命名表b以避免由于使用相同的表和字段名造成的任何冲突。

+0

工程就像一个魅力!对WHERE子句的解释? – ldiggins

+0

@ldiggins您需要确保子选择内部的金额与其匹配的外部雇员行相匹配。 – Fluffeh

+0

我想我只是不明白b.employee = a.employee – ldiggins

0

在这种情况下,你需要使用一个子查询来获取除正常行总课时你拉了回来:

SELECT 
    date, 
    totalhrs, 
    (
    select 
     sum(a.totalhrs) 
    from 
     tcardsubmit a 
    where 
     a.employee=employee 
    ) as TotalHrs 
FROM 
    tcardsubmit 
WHERE 
    employee= 'employee name' 
ORDER BY 
    date 
+0

这是错误的,如果他得到2条记录相同的日期和totalhrs?对于那些2将会有1条记录... – Night2

+0

@ Night2是的,你是正确的,我已经用子查询更新了我的答案,以获得每个员工的总数。 – Fluffeh

+0

是啊,我已经写了:) – Night2

0
SELECT tcardsubmit.employee, date,tcardsubmit.totalhrs, SumTotal.totalhrs 
FROM tcardsubmit 
WHERE employee= 'employee name' 
inner join (Select Employee, Sum(totalhrs) as TotalHrs From tcardSubmit Group By Employee) as sumTotal 
On Sumtotal.employee = tcardsubmit.employee 
ORDER BY date 

如果你想要一个聚合(最小,最大,总和等)和细节,那么一个连接是要走的路。

PS如果你有两个同名的员工,你会怎么做!

+0

查询实际从Employee数据库中提取其全名。这实际上是用于PHP。当他们登录那里时,userid会提取他们的全名,我通过$ employee = $ empfullname来携带这个名字 这样我就不会在两个不同的名字上双击 – ldiggins

+1

@tony你的SQL语法不正确,WHERE条款是在错误的地方。 – Taryn

+0

@bluefeet,欢呼声修复它 –