2012-06-04 290 views
0

我想返回基於案例數量的結果,如果大於0但是當我嘗試執行存儲過程時出現錯誤,說明:操作數類型衝突:uniqueidentifier與tinyint不兼容。這是我在where子句中嵌套的select語句。嵌套select語句

SELECT 
     O.OfficeId, 
     O.OfficeName AS Name, 
     AT.Description AS CaseActivity, 
     SUM(A.Duration) AS [CaseMinutes], 
     CAST(SUM(A.Duration) AS FLOAT)/60 AS [CaseHours], 
     COUNT(A.ActivityId) AS Activities, 
     COUNT(DISTINCT A.CaseId) AS Cases, 
     MIN(CAST(A.Duration AS FLOAT)/60) AS [Case Min Time], 
     MAX(CAST(A.Duration AS FLOAT)/60) AS [Case Max Time], 
     SUM(CAST(A.Duration AS FLOAT)/60)/COUNT(A.ActivityId) AS [Case Avg Time], 
     SUM(CAST(A.Duration AS FLOAT)/60) AS [Case TotalHours] 
    FROM Activity A 
     INNER JOIN ActivityType AT ON A.ActivityTypeId = AT.ActivityTypeId 
     INNER JOIN ActivityEntry AE ON A.ActivityEntryId = AE.ActivityEntryId 
     INNER JOIN [Case] C ON A.CaseId = C.CaseId 
     INNER JOIN [Office] O ON AE.OfficeId = O.OfficeId 
     INNER JOIN [User] U ON C.CreatedByUserId = U.UserId 
    WHERE A.CaseId in(select A.CaseId from Activity where A.CaseId > 1 AND .dbo.DateOnly(AE.ActivityDate) BETWEEN @BeginDate AND @EndDate) 
    GROUP BY 
     O.OfficeId, 
     O.OfficeName, 
     AT.Description 

**從存儲過程中預期的目標* *
我想從這個存儲過程,其中的情況下計數是返回結果大於0。目前,這個存儲過程返回的所有活動病例0或更高。我只獲得活動感興趣,其中病例是大於0我的where子句中我試圖插入另一個select語句,將結果進行過濾,以案例> 0

+0

在where子句中可能存在一個疏忽:子查詢使用A.CaseID,它應該使用Activity.CaseID,否則子查詢將更好地表示爲where。 –

+0

如果A.CaseId是uniqueidentifier,它不可能大於1. –

+0

@NikolaMarkovinovć我修改了上面的where子句,現在錯誤語句是:聚合可能不會出現在WHERE子句中,除非它在子查詢中包含在HAVING子句或選擇列表,並且要彙總的列位於外​​部引用中。 – Masriyah

回答

0

錯誤消息告訴你

其中一個比較是比較兩列不同類型的東西。

看看錶結構,看看你比較哪些列有uniqueidentifier,哪些有ints,然後看看sql,看看你正在比較哪些。