2012-06-04 301 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,看看你正在比较哪些。