在CASE-WHEN选择中需要IF-ELSE

时间:2014-01-12 00:39:20

标签: tsql stored-procedures sql-server-2012

我有一个现有的存储过程,如下所示:

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”。但是我需要对其进行更改,以便根据TaxClassification对其进行细分MyStructure(伪代码):

...
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代码中,这将是一块蛋糕!我的存储过程语法虽然不是很强大!谢谢!

1 个答案:

答案 0 :(得分: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'