SQL Server ma unikalną możliwość wykonywania w czasie rzeczywistym logiki programistycznej na wartościach w zapytaniu. Na podstawie tych logicznych ocen możesz generować różne wartości jako część zwróconego zestawu danych.
Korzystanie z instrukcji CASE
Jest to najłatwiejsze we wszystkich wersjach SQL Server przy użyciu CASE
instrukcja, która działa jak logiczne IF...THEN...ELSE
wyrażenie i zwraca różne wartości w zależności od wyniku.
W poniższym przykładzie chcemy zwrócić dodatkowe locale
kolumna, która określa, czy nasza książka dzieje się w Śródziemiu, czy w zwykłej Starej Ziemi.
SELECT
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale,
books.*
FROM
books
Zanim przyjrzymy się specjalnemu CASE
aspekt tego stwierdzenia, tymczasowo usuńmy CASE
aby zauważyć, że jest to niezwykle prosty SELECT
oświadczenie na powierzchni:
SELECT
books.*
FROM
books
Dlatego przyjrzyjmy się, jak CASE
sekcja jest ustrukturyzowana i jakie logiczne zachowanie wykonujemy.
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale
Na początek inicjujemy CASE
oświadczenie, a następnie określ, na jakich warunkach (WHEN
) nasz CASE
oświadczenie powinno oceniać wynik. W tym przykładzie sprawdzamy books.title
i books.primary_author
; jeśli któryś pasuje do naszego tolkienowskiego motywu, THEN
zwracamy wartość „Śródziemie”. Jeśli żadne z pól nie pasuje do naszego wyszukiwania, zamiast tego zwracamy wartość „Ziemia”.
Aby zmienić logikę jako pseudokod IF...THEN...ELSE
oświadczenie, po prostu prosimy SQL o ocenę:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
Na koniec należy pamiętać, że CASE
oświadczenie musi być zawsze dołączone na końcu z pasującym END
oświadczenie. W powyższym przykładzie zmieniamy również nazwę wynikowej wartości zwracanej do locale
, choć jest to z pewnością opcjonalne.
Korzystanie z funkcji IIF
Jeśli używasz bardziej nowoczesnej wersji SQL, warto wiedzieć, że SQL Server 2012 wprowadził bardzo przydatny IIF
funkcjonować. IIF
jest skróconą metodą wykonywania IF...ELSE
/CASE
oświadczenie i zwrócenie jednej z dwóch wartości, w zależności od oceny wyniku.
Restrukturyzacja naszego powyższego przykładu, aby użyć IIF
jest dość proste.
SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
Z IIF
funkcji, w dużej mierze zastępujemy dużo cukru składniowego z CASE
oświadczenie z kilkoma prostymi separatorami przecinkami, aby odróżnić nasze argumenty.
Wszystko powiedziane, oba CASE
i IIF
wykonaj tę samą pracę, ale jeśli masz wybór, IIF
ogólnie będzie znacznie prostszy w użyciu.