2015-01-08 33 views
0

我已經編寫了一個SQL查詢,它將返回一組結果,但返回的結果集不夠精確!所以我現在要做的是修剪結果以獲得我需要的確切信息!我想要的每個項目都會返回多行,並且我正在查找特定行以返回給用戶。可以在這種格式的WHERE條款中使用CASE語句

所以我想在我的where子句中搜索一個值,並且只從該項目中選擇所需的標準!我寫了這個case語句,我的where子句中,但我不能讓它有效地發揮作用:

and SourceType.Name = (CASE When SourceType.Name = '7550RTU' Then 
         Select Quantity.Name from Quantity 
         Where Quantity.Name = 'DI-S1 Cnt' 
        End) 
+1

嘗試它,你會看到,它是可能的。 – HoneyBadger

+1

自己試試吧! – Bharadwaj

+0

它不會工作,這就是爲什麼我問這個問題,現在需要找出它是否可能! – user3538102

回答

1
and SourceType.Name = (CASE When SourceType.Name = '7550RTU' Then 
         (Select Quantity.Name from Quantity 
         Where Quantity.Name = 'DI-S1 Cnt') 
        End) 

即把子查詢放在圓括號之間。 (請記住,子查詢不應該在這裏返回多於一行)。

但是,如果仔細觀察,會發現一些邏輯問題。

子選擇(Select Quantity.Name from Quantity Where Quantity.Name = 'DI-S1 Cnt')將返回值'DI-S1 Cnt'或NULL(如果不存在此類行)。

這意味着CASE返回'DI-S1 Cnt'(如果SourceType.Name ='7550RTU'且子選擇行存在)或NULL(如果和SourceType.Name <>'7550RTU'或no sub - 選擇行存在。)

如果SourceType.Name是'7550RTU',並且CASE返回'DI-S1 Cnt',則比較結果爲FALSE。如果SourceType.Name是'7550RTU'並且CASE返回NULL,則比較是未知/ NULL。如果SourceType.Name不是'7550RTU',則比較結果爲FALSE(或NULL)。

所以主要問題是,你在這裏做什麼?

+0

有沒有辦法,它可以返回更多的1行?還是有另一種做法呢? – user3538102

0

如果你的問題是,如果子查詢將返回超過1行,您可以選擇從您選擇TOP1數據列表頂部1記錄您的查詢返回