SQl - 在预期条件的上下文中指定的非布尔类型的表达式,靠近')'

时间:2017-05-11 11:59:14

标签: sql sql-server sql-server-2008 tsql sql-server-2008-r2

在SQL Server 2014中使用以下查询获取此错误。

SELECT 
      [Case]
      ,[Course]
      ,[Device]
      ,[IntegerValue]     
      ,[Question]
      ,IFL.[QuestionSimplified]
      ,[Revision]
      ,[Script]    
      ,[TextValue]
      ,[Timestamp]
      ,[Type]
      ,[Variable]     
      ,[Wave]
  FROM [dbo].[CosmosData] CD
  Left Outer join [dbo].[ImportedFacilityList] IFL on CD.[Variable] = IFL.[Variablename]
  where 
CD.[Script] = 'CARD-F' and 

(select  * from [dbo].[CosmosData] where Variable = 'SURVEY_TYPE' and IntegerValue = '2')

当我运行上述查询时,我收到了beloiw错误,

Ms 4145,Level 15,State 1,Line 20 在预期条件的上下文中指定的非布尔类型的表达式,在')'附近。

请帮忙吗?

2 个答案:

答案 0 :(得分:4)

您在where子句中有这个:

and (select  * from [dbo].[CosmosData] where Variable = 'SURVEY_TYPE' and IntegerValue = '2')

SQL需要布尔表达式。这通常通过使用=或类似的比较运算符来形成。在你的情况下,我认为你只是exant exists

exists (select  * from [dbo].[CosmosData] where Variable = 'SURVEY_TYPE' and IntegerValue = 2)

那就是说,你也可能想要一个关联条款。

注意:我从整数值中删除了单引号。仅对字符串和日期常量使用单引号。

答案 1 :(得分:0)

基于您在此表中使用大小写作为键的假设,您可以使用以下方法返回应用条件的cosmos数据中的所有行,并使用内部条件中的where子句中的select匹配它

 SELECT 
  [Case]
  ,[Course]
  ,[Device]
  ,[IntegerValue]     
  ,[Question]
  ,IFL.[QuestionSimplified]
  ,[Revision]
  ,[Script]    
  ,[TextValue]
  ,[Timestamp]
  ,[Type]
  ,[Variable]     
  ,[Wave]
FROM [dbo].[CosmosData] CD
Left Outer join [dbo].[ImportedFacilityList] IFL on CD.[Variable] = IFL.  [Variablename]
where CD.[Script] = 'CARD-F' 
and Case
 IN
 (select  Case from [dbo].[CosmosData] where Variable = 'SURVEY_TYPE' and     IntegerValue = '2')

希望有助于任何