2014-01-17 30 views
1

我正在嘗試構建一個聲明,該聲明將返回每位員工每天處理的工作訂單的數量。問題在於,員工可以在一天內多次處理工作訂單(我只能算作1),或者他們可以在多個工作日內多次處理工單(我將每天處理1個工作日上)。使用帶有AND的案例陳述來過濾結果SQL Server 2008

我可以使用Case語句與AND表達式來執行此操作嗎?是這樣的:

SELECT  
    WKE_EmployeeID, WKE_LabDate, WKE_RecordID, 
    'WorkOrder' = CASE 
        WHEN WKE_WorkOrderID = WKE_WorkOrderID AND WKE_LabDate = WKE_LabDate 
        THEN (Select Distinct WKE_WorkOrderID) 
        ELSE WKE_WorkOrderID 
FROM   
    dbo.WKE 
WHERE  
    (WKE_EmployeeID IN (N'sweda', N'bakja', N'gebwa')) 
    AND (WKE_LabDate BETWEEN @FromDate AND @ToDate) 
ORDER BY 
    WKE_WorkOrderID 

這僅僅是課程的第一部分,B/C,然後我需要計算每個員工每天的工作訂單,但我想弄清楚如何先做這部分讓我可以驗證我的數據。

我在正確的道路上,還是應該以完全不同的方式來做到這一點?也許子報告?

示例數據庫

WKO employee date 
RW19800 bakja 1/6/14 12:00 AM 
RW20573 gebwa 1/2/14 12:00 AM 
RW20574 gebwa 1/2/14 12:00 AM 
RW20600 gebwa 1/10/14 12:00 AM 
**RW20602 gebwa 1/2/14 12:00 AM 
RW20602 gebwa 1/7/14 12:00 AM** 
*RW20603 bakja 1/8/14 12:00 AM 
RW20603 bakja 1/8/14 12:00 AM* 

所以,對上面的粗體部分,我會因爲工作就可以了2個不同天做計爲2個實例。

對於斜體部分,我想把它當作1個實例,因爲在同一天兩次完成它的工作。

最終輸出樣本例如:

date WKO Count employee 
1/2/14 12:00 AM 3 gebwa 
1/6/14 12:00 AM 1 bakja 
1/7/14 12:00 AM 1 gebwa 
1/8/14 12:00 AM 1 bakja 
1/10/14 12:00 AM1 gebwa 
+0

樣品輸入和輸出數據集嗎? – MarkD

+0

什麼數據類型是'WKE_LabDate' ?,你使用的是什麼版本的SQL Server? – Lamak

+0

我正在使用SQL Server 2008,並且使用Sql server mgmnt studio。 WKE_LabDate是日期時間數據類型 – jballard81

回答

3
SELECT WKE_EmployeeID, WKE_LabDate, COUNT(DISTINCT WorkOrderID) 
FROM dbo.WKE 
WHERE EmployeeID IN (N'sweda', N'bakja', N'gebwa') 
    AND Date BETWEEN @FromDate AND @ToDate 
GROUP BY WKE_EmployeeID, WKE_LabDate 
+0

嗨,匿名!這看起來很適合我!你能解釋爲什麼每個員工每天都會回來,但是不能排除在兩天內工作的訂單嗎?我只在SQL中工作了〜6個mos,並且任何其他信息對於幫助我改進我的查詢邏輯非常有用 – jballard81

+0

'GROUP BY id,date'表示原始數據被劃分爲單獨的桶,其中一個桶用於每個(id,日期)對。 'COUNT()'然後將分別處理每個桶。使用COUNT(DISTINCT ...)意味着它只計算每個(id,日期)桶的唯一工單,而不是該桶中的所有工單。 – Anon

+0

太棒了,非常感謝你的詳細信息! – jballard81

3

不,你是不是在正確的道路上。這應該只使用GROUP BY完成。

這將是這個樣子:

select EmployeeID, Year, Month, Day, Count(*) as Count 
from (
    --get one row per employee/workorder/day 
    select EmployeeID, WorkOrderID, year(date) as Year, month(date) as Month, day(date) as Day 
    from WorkOrder 
    where EmployeeID in (N'sweda', N'bakja', N'gebwa') 
     and date between @FromDate and @ToDate 
    group by EmployeeID, WorkOrderID, year(date), month(date), day(date) 
    ) a 
group by EmployeeID, Year, Month, Day 
+0

這看起來更像是對我的評論 – IndoKnight

+0

我可以在Group By語句中過濾嗎? – jballard81

+0

是的,我更新了一個例子。 – RedFilter