我想執行的SQL Server此查詢,但沒有奏效:使用「的情況下」有「或」在where子句中
Select Nom from tab
WHERE
Nom LIKE
CASE WHEN libelle !='' then
Nom1
OR
Nom2
else
Nom3
end
任何幫助時便會明白
更新:新增從OP評論:
我想驗證是否libelle不是空的NOM像NOM1或類似其他NOM2(如果libelle爲空)NOM像nom3
我想執行的SQL Server此查詢,但沒有奏效:使用「的情況下」有「或」在where子句中
Select Nom from tab
WHERE
Nom LIKE
CASE WHEN libelle !='' then
Nom1
OR
Nom2
else
Nom3
end
任何幫助時便會明白
更新:新增從OP評論:
我想驗證是否libelle不是空的NOM像NOM1或類似其他NOM2(如果libelle爲空)NOM像nom3
我不覺得case
是去這裏的正道,所以我看到這是更喜歡:
select Nom
from tab
where (
libelle != ''
and (
Nom like Nom1
or Nom like Nom2
)
)
or (
libelle = ''
and Nom like Nom3
)
對我來說,這似乎更易於閱讀和理解。查詢優化器甚至可能同意。
語法是:
CASE WHEN libelle != '' THEN Nom1
WHEN libelle /* OTHER CONDITION HERE */ THEN Nom2
ELSE Nom3
END
問題是它不是其他條件,它是一樣的 – user1805523
@ user1805523 - 你是什麼意思「它是同一個」?當'libelle!=''''時你想要返回'Nom1'和'Nom2'嗎? – Oded
就像@ user1805523說的。你什麼意思?你是什麼意思「Nom1 OR Nom2」呢? –
SELECT Nom
FROM tab
WHERE
1 = CASE
WHEN libelle != '' AND (Nom like Nom1 OR Nom like Nom2) THEN 1
WHEN libelle = '' AND Nom like Nom3 THEN 1
ELSE 0
END
(非常類似於其他的選擇 - 尤其是蒂姆的)
謝謝你的工作 – user1805523
+1好的翻譯到開關。 –
所以你要做的動態SQL的話,我不相信你可以做到這一點很喜歡與一個case語句,此可以工作雖然:
declare @sql nvarchar(100)
declare @libelle nvarchar(20)
--Set @libelle to something (can be via a query, or a stored proc parameter etc rather than just a string like here
set @libelle = ''
set @sql = 'SELECT Nom FROM tab WHERE Nom LIKE'
IF @libelle = ''
SET @sql = @sql + ' ''Nom3'''
ELSE
SET @sql = @sql + ' ''Nom1'' OR Nom LIKE ''Nom2'''
EXEC (@sql)
這應該至少讓你在正確的道路上。
我不確定我是否理解需要跳轉到使用過程和動態SQL來執行此操作。另外,你不需要多次運行(可能是每行)並將結果聯合起來,因爲'libelle'實際上是'tab'表中的一列,並且看起來不是一個變量? –
「不行」的任何定義將不勝感激。 –
這裏的OR是什麼意思?我讀它的方式沒什麼意義。 – Oded
你能解釋你在這裏想要做什麼嗎? 'CASE'聲明沒有多大意義。也許發佈一些數據,然後期望的結果將有所幫助 – Taryn