2012-09-17 109 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,歡呼聲修復它 –