2016-04-26 61 views
0

我現在的SQL是這樣的:我需要指導格式化輸出,一個SQL查詢

Declare @Start datetime; 
Declare @End datetime; 

set @Start = '2016-04-4'; 
set @End = '2016-04-10'; 


Select pr.PR_FIELD03 AS EENo, pr.PR_Name AS EEName, lo.LocationName AS [State], SUM(ts.TotalMins/60) AS Hours, ts.OTFlag from TimeSheets as ts 
join BWSPRMSD as pr on ts.EmployeeSSN = pr.PR_SSN 
join Locations as lo on ts.LocationID = lo.LocationID 
where ts.TransDate >= @start AND ts.TransDate <= @End AND ts.ActiveFlag = 1 AND HolidayFlag = 0 AND VacationFlag = 0 
group by pr.PR_FIELD03, pr.PR_Name, lo.LocationName, ts.OTFlag; 

修訂

這將會給我:

EENo EEName  State Hours OTFlag 
118  Randy  TX  31  1 
118  Randy  TX  40  0 
118  Randy  MS  40  0 
125  Bill  OK  40  0 

我需要的是:

EENo EEName  Reg Hours  O.T. Hours State 
118  Randy  40    31   TX 
118  Randy  40    0    MS 
125  Bill  40    0    OK 

任何建議,你可能會感激。

預先感謝您

UPDATE

我很抱歉,因爲我原來的職位也不是很清楚。不,我不想僅更改列名稱,如果OTFlag已設置,我需要在同一行上分割小時。

另外,如果linq或Lambda是你的一杯茶。這些答案同樣適用。

+0

您希望列具有不同的名稱或不同格式的數據嗎? – WickedFan

+0

Randy,想象一下,除了你之外,沒有人坐着......不知道你的查詢中有什麼數據出來,不知道你想要什麼......請嘗試以某種方式提出你的問題,讓人們有機會理解您的需求......您的更新完全沒有任何結果......請在您的專欄名稱下方添加一些示例數據,以及這應該看起來像(*我擁有的*和*我想要的*) – Shnugo

+0

您的表結構是什麼? ts.TotalMins/60似乎只是你的OT時間。你的常規分鐘在哪裏? – WickedFan

回答

1

繼續進行CTE。我沒有仔細檢查我的代碼,但它應該非常接近!假設在這裏你的時間表上的一個名爲OTFlag的標誌在進入正常小時時設置爲0,當它們是OT小時時設置爲1。這樣,每個員工在每個工作狀態中都會有一個條目。

Declare @Start datetime; 
Declare @End datetime; 

set @Start = '2016-04-4'; 
set @End = '2016-04-10'; 

with regHours as (SELECT ts.employeeSSN, CAST(decimal(5,2),SUM(ts.totalMins/60) AS RegHours , lo.locationName as State 
FROM TimeSheets ts 
join Locations as lo on ts.LocationID = lo.LocationID 
where ts.TransDate >= @start 
AND ts.TransDate <= @End 
AND ts.ActiveFlag = 1 
AND ts.OTFlag = 0 
AND HolidayFlag = 0 
AND VacationFlag = 0 
Group BY ts.employeeSSN, lo.locationName) 



Select pr.PR_FIELD03 AS EENo 
     , pr.PR_Name AS EEName   
     , rh.regHours as 'Regular Hours' 
     , SUM(ts.TotalMins/60) AS 'O.T. Hours' 
     , lo.LocationName AS [State] 
from TimeSheets as ts 
join BWSPRMSD as pr on ts.EmployeeSSN = pr.PR_SSN 
join Locations as lo on ts.LocationID = lo.LocationID 
join regHours rh ON rh.employeeSSN = ts.employeeSSN AND rh.State = ts.LocationID 
where ts.TransDate >= @start 
AND ts.TransDate <= @End 
AND ts.ActiveFlag = 1 
AND HolidayFlag = 0 
AND VacationFlag = 0 
group by pr.PR_FIELD03, pr.PR_Name, lo.LocationName, rh.RegHours 
+1

這個CTE邏輯應該在同一行上獲得你的OT時間和正常工作時間。另外,交叉適用於時間表可能已經工作。 – WickedFan

+0

現在不在工作...... @WickedFan看起來比我想象的要好100%。 – Randy

+0

注意到您的編輯。很高興這是我所認爲的大聲笑!或者,如果位置不相關,則可以將這些狀態連接在一起,從而更加突出這一點。 – WickedFan