2013-07-22 37 views
-2

我的查詢有問題,我希望它返回結果集爲Year = 2013,Month = 1但每個用戶只有一行每個月,與當月登錄小時數總計,我認爲這個問題是我的分組:SQL Server 2008:select在一個月內返回多個結果,而不是每個用戶1個

SELECT YEAR(UP_Date) AS 'Year', 
     MONTH(UP_Date) AS 'Month', 
     SUM(ISNULL(UP_UserID,0)) AS UserID, 
     U_UserName AS UserName, 
     UP_AveCallTime AS AveCallTime, 
     UP_TotCallTime AS TotCallTime, 
     CAST(DATEDIFF(DAY,UP_LogOn, UP_LogOff) AS varchar) + ':' + 
     CAST(DATEDIFF(HOUR,UP_LogOn, UP_LogOff) AS varchar) + ':' + 
     CAST(DATEDIFF(MINUTE,UP_LogOn,UP_LogOff) AS varchar) AS [HoursOfMonth] 

FROM [RPT_User_Performance_Data_cus] 
INNER JOIN Users us ON 
    UP_UserID = us.ID 

GROUP BY Year(UP_Date), MONTH(UP_Date), UP_AveCallTime, UP_TotCallTime, U_UserName, UP_LogOn, UP_LogOff 

------Result I Get---------------------------- 
Year Month UserID UserName AveCallTime TotCallTime HoursOfMonth 
2013 6 18552 BossJobs NULL    NULL   0:0:4 
2013 6 18552 BossJobs NULL    NULL   0:0:02 
2013 6 18552 BossJobs NULL    NULL   0:3:21 
2013 6 18552 BossJobs NULL    NULL   0:5:01 
2013 6 18552 BossJobs NULL    NULL   NULL 
2013 6 18553 KingGates NULL    NULL   0:0:2 
2013 6 18553 KingGates NULL    NULL   0:1:31 

-------Instead of --------------------- 
Year Month UserID UserName AveCallTime TotCallTime HoursOfMonth 
2013 6 18552 BossJobs NULL    NULL   0:5:24 
2013 6 18553 KingGates NULL    NULL   0:1:33 
+0

這裏有幾個問題。首先我可以看到你也有同樣的用戶(BossJobs)的2個不同的UserId,從我能告訴你正在尋求總結一天,小時和分鐘,是這種情況?如果是這樣,你不能總結一個varchar他們需要被轉換爲INT。同樣,即使你將總和加起來也不會達到預期的輸出。請你澄清這些問題 –

回答

1

如果我能理解你的查詢,

您GROUP BY的東西你不想要如UP_AveCallTime, UP_TotCallTime, U_UserName, UP_LogOn, UP_LogOff,請將其從group by中刪除

爲您AveCallTime,TotCallTime,HoursOfMonth你將要使用SUMAVG取決於你的邏輯

+0

嗨,當我刪除他們,我得到這個:列'RPT_User_Performance_Data_cus.UP_LogOff'在選擇列表無效,因爲它不包含在聚合函數或GROUP BY子句。 – Thapz

+0

此錯誤表示您嘗試使用沒有使用聚合函數的組中未使用的值。嘗試通過首先刪除所有彙總的部分,並看到你得到你想要的內容,逐步建立你的查詢,然後逐個添加它們以查明問題。 – asafrob

0

嘗試這樣:

SELECT YEAR(UP_Date) AS 'Year', 
     MONTH(UP_Date) AS 'Month', 
     MAX(ISNULL(UP_UserID,0)) AS UserID, 
     U_UserName AS UserName, 
     AVG(UP_AveCallTime) AS AveCallTime, 
     SUM(UP_TotCallTime) AS TotCallTime, 
     CAST(SUM(DATEDIFF(DAY,UP_LogOn, UP_LogOff)) AS varchar) + ':' + 
     CAST(SUM(DATEDIFF(HOUR,UP_LogOn, UP_LogOff)) AS varchar) + ':' + 
     CAST(SUM(DATEDIFF(MINUTE,UP_LogOn,UP_LogOff)) AS varchar) AS [HoursOfMonth] 
FROM [RPT_User_Performance_Data_cus] 
INNER JOIN Users us ON UP_UserID = us.ID 
GROUP BY Year(UP_Date), MONTH(UP_Date), U_UserName 

不知道你的邏輯得到[HoursOfMonth]。您可能需要調整或解釋得更好。

+0

我想單獨登錄這個月的總時間的結果爲days:hours:munites,問題是我的結果集沒有返回總結,如上面的查詢中所示。 – Thapz

相關問題