Использование Case

Previous  Top  Next

    
 

 

Оператор выбора Case работает немного по другому чем в классических языках. В классических языках Case выбирает какой оператор запускать, а в T-SQL он выбирает выражение которое надо использовать для вычисления чего-то. Case выступает в ввиде функции которая возвращает результат в зависимости от условия. Имеет 2 формы написания:

 

1.

Code:

Declare @m int

 

--©Drkb v.3(2007): www.drkb.ru

 

Set @m=Month(GetDate())

 

Select

@m as MonthNumber,

Case @m

   When 1 Then 'Январь'

   When 2 Then 'Февраль'

   When 12 Then 'Декабрь'

   Else 'Не зима'

End as MonthName

 

2.

Code:

Declare @m int

 

--©Drkb v.3(2007): www.drkb.ru

 

Set @m=Month(GetDate())

 

Select

@m as MonthNumber,

Case

   When @m=1 Then 'Январь'

   When @m=2 Then 'Февраль'

   When @m=12 Then 'Декабрь'

   When @m is Null Then 'Неизвестно'

   Else 'Не зима'

End as MonthName

 

 

Можно использовать Case для присвоения

 

Code:

--©Drkb v.3(2007): www.drkb.ru

 

Set @MyVar=

Case

   When @m=1 Then 'Январь'

   When @m=2 Then 'Февраль'

   When @m=12 Then 'Декабрь'

   When @m is Null Then 'Неизвестно'

   Else 'Не зима'

End

 

 

Можно использовать в операциях сравнения, сортировки, группировки и функциях:

 

Code:

--©Drkb v.3(2007): www.drkb.ru

 

Select

dbo.MyFunction(

   Case

     When @m=1 Then 'Январь'

     When @m=2 Then 'Февраль'

     When @m=12 Then 'Декабрь'

     When @m is Null Then 'Неизвестно'

     Else 'Не зима'

   End),

Case When MyField=0 Then 'False' else 'True' End,

Count(*)

From MyTable

Where Case When MyField1=0 Then Field2 else Field3 End>1

Group by Case When MyField=0 Then 'False' else 'True' End

Order By Case When MyField=0 Then 'False' else 'True' End

©Drkb::02815

Автор: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)