2017-08-17 75 views
2

我遇到了LIKE語句附近的sql查詢錯誤。我是否在CASE的WHEN子句中錯誤地格式化了LIKE子句?這是代碼。無法精確定位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」。

+1

看起來你錯過了AS ASINYN之前的一個關係,並且混合了搜索到的CASE形式。 –

+0

「不喜歡代碼」,以及你的意思是什麼? –

+0

你不能合併'CASE'的兩個變體,要麼你做'CASE表達'當值THEN ...'或者當'表達那麼'的時候,你就是合併。 –

回答

0

爲正確的語法是:

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

不要在此語法把字段名CASE後。

1

這似乎是這個問題..

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

由於這是一個子查詢的一部分,你需要另一個parenthese

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

ALSO

您不能將列名稱放在之後當您使用相等運算符時,聲明爲。

這是可以接受的

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 
2

你在你的代碼中有兩處錯誤,而這兩者都是指出,儘管不是在相同的答案。

  1. 你的case語句應該沒有括號中的列名 - 我評論它在下面的代碼)
  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 
+0

從CASE之後刪除列名稱會產生錯誤,指出BookedLastName,BookeDOB和ChargeCode是無效的列名稱。我已經三重檢查過這些實際上是正確的列名,包括大寫字母。它們在不使用CASE的不同文件中的另一個子查詢中起作用。 我相信我們的數據庫是SQL Server。 CASE查詢只能與T-SQL一起使用還是應該與SQL服務器一起使用? – JackOfTales

+0

此查詢將正確解析 - 問題可能在於您尚未發佈的更大查詢中(這似乎只是其中的一部分) – Eli

+0

TSQL是SQL Server的SQL語言@JackOfTales的實現。發佈你的整個查詢,因爲Eli和我的答案都會避免基於你發佈的錯誤(儘管ELI需要在他的答案中加上圓括號) – scsimon

相關問題