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.