2014-01-12 2 views
1

У меня есть существующая хранимая процедура, которая выглядит следующим образом:Нужна IF-ELSE внутри CASE-Когда выбор

SELECT TOP 1 
... 
    CASE PX.Client.value('(Type)[1]', 'varchar(25)') 
     WHEN 'Sole Proprietor' THEN 'SPR' 
     WHEN 'Partnership' THEN 'PAR' 
     WHEN 'Corp (C)' THEN 'COR' 
     WHEN 'Corp (S)' THEN 'SCO' 
     WHEN 'LimitedCorp' THEN 'LLC' 
     WHEN 'Trust' THEN 'TRU' 
    END AS MyStructure, 
... 
INTO #Prod 
FROM 
    @XMLIN.nodes('/MyDataset/MyRegistration') AS PX(Client) 

Все работает отлично, за исключение мне нужно изменить логику. Прямо сейчас, если Type является «LimitedCorp», MyStructure всегда «LLC». Но мне нужно, чтобы изменить его так, чтобы он подразделяет MyStructure на основе TaxClassification как так (псевдо-код):

... 
WHEN 'LimitedCorp' THEN 
    IF PX.Client.value('(TaxClassification)[1]') == 'Partnership' THEN 'LP' 
    ELSE IF PX.Client.value('(TaxClassification)[1]') == 'SCorp' THEN 'LLS' 
    ELSE 'LLC' 
WHEN 'Trust' ... 

В моем коде .NET это будет кусок пирога! Однако я не очень силен в синтаксисе хранимой процедуры! Благодаря!

ответ

2

гнездо другой case:

WHEN 'LimitedCorp' THEN 

    case 
     when PX.Client.value('(TaxClassification)[1]') == 'Partnership' then 'LP' 
     when PX.Client.value('(TaxClassification)[1]') == 'SCorp' then 'LLS' 
     else 'LLC' 
    end 

WHEN 'Trust' THEN 'TRU' 
Смежные вопросы