无法查明 LIKE 关键字附近的错误

Can't pinpoint error near the LIKE keyword

我 运行 在我的 LIKE 语句附近出现 sql 查询错误。我是否在 CASE 的 WHEN 子句中错误地格式化了 LIKE 子句?这是代码。

SELECT
substring (Cases.FileNumber,4,6) AS [FileNumber]
,Charge.ChargeCode
,Cases.BookedLastName
,Cases.BookedFirstName
,Cases.ArrestDate
,Cases.BookedDOB
,Cases.BookedAge
,Charge.OffenseToDate
,Cases.BookedRace
,Cases.BookedSex
,Charge.OffenseStreetAddress1
,Charge.OffenseCity
,Charge.OffenseState
,Charge.OffenseZipCode
,Charge.ChargeDescription
,(SELECT CASE
WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
      ELSE 'Not Heroin'
      END
  FROM tblCsCharge AS charge1
           INNER JOIN tblCsCases AS cases1
                           ON charge1.FileNumber = cases1.FileNumber
 WHERE
      charge1.BookedLastName = cases1.BookedLastName
      AND charge1.BookedLastName = cases1.BookedLastName
      AND charge1.BookedDOB = Cases.BookedDOB
      AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN
FROM
    tblCsCases AS Cases
    INNER JOIN tblCsCharge AS Charge
        ON Cases.FileNumber = Charge.FileNumber
    WHERE Cases.IssuedDate >= 01/01/2017
    AND
    Cases.IssuedDate <= @EndDate
    AND
    Charge.ChargeCode IN (N'579.015-001Y201735')
    AND
    Cases.BookedLastName NOT IN (N'Bogus')

    ORDER By
    Cases.BookedLastName

这是一个更大查询中的一个子查询,该查询侧重于构建一个列,该列将根据我们数据库中的大文本字段简单地输出海洛因或非海洛因。

编辑:

尽管应该使代码编译的更改,现在出现以下错误: 列名称无效 'BookedLastName'。 列名称无效 'BookedLastName'。 列名称无效 'BookedDOB'。 无法绑定多部分标识符 "cases2.ChargeCode"。

正确的语法是:

CASE 
    WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
    ELSE 'Not Heroin'
END

在此语法中,不要将字段名称放在 CASE 之后。

这似乎是问题..

AND cases2.ChargeCode IN (N'579.015-001Y201735') AS HeroinYN

由于这是子查询的一部分,您需要另一个括号

AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN

还有

当您使用相等运算符时,您不能将列名放在 CASE 语句之后。

这是可以接受的

select
   case columnName
      when 'X' then 1
      when 'Y' then 0
   end

这不是

select
   case columnName
      when = 'X' then 1
      when columnName like '%Y%' then 0
   end

更正脚本

,(SELECT CASE
      WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
      ELSE 'Not Heroin'
      END
  FROM tblCsCharge AS charge1
           INNER JOIN tblCsCases AS cases1
                           ON charge1.FileNumber = cases1.FileNumber
 WHERE
      charge1.BookedLastName = cases1.BookedLastName
      AND charge1.BookedLastName = cases1.BookedLastName
      AND charge1.BookedDOB = Cases.BookedDOB
      AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN

您的代码中有两个错误,虽然不是在同一个答案中,但都已指出。

  1. 你的案例陈述应该没有括号中的列名 - 我在下面的代码副本中注释掉了)
  2. 您在查询末尾缺少右括号,就在别名之前 - 我在下面添加了它。

.

,(SELECT CASE--(charge1.ChargeDescription)
      WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
      ELSE 'Not Heroin'
      END
  FROM tblCsCharge AS charge1
           INNER JOIN tblCsCases AS cases1
                           ON charge1.FileNumber = cases1.FileNumber
 WHERE
      charge1.BookedLastName = cases1.BookedLastName
      AND charge1.BookedLastName = cases1.BookedLastName
      AND charge1.BookedDOB = Cases.BookedDOB
      AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN