2014-02-09 86 views
0

我有存儲過程接受可能是男性,女性或兩者的性別價值,我需要能夠條件我的where子句,如果@gender值是'both'那麼選擇應該返回男性和女性,但如果性別是男性或女性,那麼應該選擇@gender值。我試着下面的查詢都給不正確的語法錯誤的地方。SQL服務器使用的地方如果有其他條件

選擇 名字,SecondName,性別,種族,志願者

IF @gender = 'both' 
BEGIN 

    WHERE Gender = 'male' or Gender ='female' 

END ELSE BEGIN 

    WHERE Gender = @gender 
END 
+0

的最後,我沒有得到馬累%使用通配符...據我所知,只有兩種性別,無論是男性還是女性... – Maverick

+0

你不能在這樣一個WHERE子句中放置IF語句......要麼使用動態SQL,這將是一個矯枉過正的問題,或者你使用案件。 – logixologist

回答

2

高度,高度單位,重量,WeightUnit,EmailAdd 不能使用if有一個條件where條款。相反,只是把邏輯查詢:

基礎上的OP,你想:

select FirstName, SecondName, Gender, race, Height, HeightUnit, 
     Weight, WeightUnit, EmailAdd 
from volunteers 
where @gender = 'both' and gender in ('male', 'female') or 
     gender = @gender; 

或者,這可能就足夠了:

select FirstName, SecondName, Gender, race, Height, HeightUnit, 
     Weight, WeightUnit, EmailAdd 
from volunteers 
where @gender = 'both' or 
     gender = @gender; 
0

確定,如果我理解正確你...嘗試這種方式:

select FirstName,SecondName, 
CASE When @Gender = 'both' then 'Male, Female' else @Gender as Gender END 
,race,Height,HeightUnit, Weight,WeightUnit,EmailAdd from volunteers 

你可以調整你想要它說什麼,但這是想法

UPDATE:%的評論這是他使用的全過程:

Create PROCEDURE spSelectUpdateTrial 

    @gender nvarchar(50), 
    @minage nvarchar(150), 
    @maxage nvarchar(150), 
    @country nvarchar(50), 
    @smoking nvarchar (50), 
    @smoke nvarchar(50), 
    @nct nvarchar(50) AS 

    select FirstName, 
SecondName, 
CASE 
When @Gender = 'both' 
then 'Male, Female' 
else @Gender 
END 
as 
Gender, 
race, 
Height, 
HeightUnit, 
Weight, 
WeightUnit, 
EmailAdd 
from volunteers 

注意我加入後else @gender

+0

我不知道@gender是如何在這裏使用的,所以也許你真的指性別(來自數據庫),而不是'@ Gender',我認爲它是一個參數被傳入。 – logixologist

+0

是的ATgender是參數屬,我已經用於代碼,但得到錯誤鄰近 '作爲性別' 創建PROCEDURE spSelectUpdateTrial ATgender爲nvarchar(50), \t ATminage nvarchar的(150), \t ATmaxage nvarchar的(150), \t ATcountry爲nvarchar(50), \t ATsmoking爲nvarchar(50), ATsmoke爲nvarchar(50), \t ATnct爲nvarchar(50) AS 選擇 名字,SecondName,CASE當ATGender = '兩個' 然後 '男,女' 其他ATGender如性別,種族,身高,高度單位,重量,WeightUnit,EmailAdd 志願者 –

+0

你缺少和END後@Gender – logixologist