W jaki sposób wykonują IF...THEN
w SQL SELECT
rachunku?
Na przykład:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
sql
sql-server
tsql
if-statement
case
Eric Labashosky
źródło
źródło
WHERE
iCHECK
nie dotyczySELECT
.Odpowiedzi:
CASE
Oświadczenie znajduje się najbliżej IF w SQL i jest obsługiwany we wszystkich wersjach SQL Server.Musisz zrobić tylko,
CAST
jeśli chcesz, aby wynik był wartością logiczną. Jeśli jesteś zadowolony zint
, działa to:CASE
instrukcje mogą być osadzone w innychCASE
instrukcjach, a nawet zawarte w agregacjach.SQL Server Denali (SQL Server 2012) dodaje instrukcję IIF , która jest również dostępna w trybie dostępu (wskazał Martin Smith ):
źródło
W tej sytuacji opis przypadku jest Twoim przyjacielem i przybiera jedną z dwóch form:
Prosty przypadek:
Rozszerzona sprawa:
Możesz nawet umieszczać instrukcje przypadków w kolejności według klauzuli, aby uzyskać naprawdę fantazyjne zamawianie.
źródło
AS Col_Name
po,END
aby nazwać wynikową kolumnęOd SQL Server 2012 możesz do tego użyć
IIF
funkcji .Jest to faktycznie tylko krótszy (choć nie standardowy SQL) sposób pisania
CASE
.Wolę zwięzłość w porównaniu z
CASE
wersją rozszerzoną .Zarówno
IIF()
iCASE
determinację jako wyrażenia w obrębie SQL i mogą być używane tylko w ściśle określonych miejscach.Jeśli te ograniczenia nie mogą zaspokoić twoich potrzeb (na przykład potrzeba zwrotu zestawów wyników o różnych kształtach, zależnych od niektórych warunków), wówczas SQL Server ma również
IF
słowo kluczowe proceduralne .Jednak przy takim podejściu należy czasem zachować ostrożność, aby uniknąć problemów z wąchaniem parametrów .
źródło
Możesz znaleźć kilka dobrych przykładów w Mocach instrukcji CASE SQL i myślę, że instrukcja, której możesz użyć, będzie mniej więcej taka (z 4guysfromrolla ):
źródło
Przypadek użycia. Coś takiego.
źródło
źródło
Microsoft SQL Server (T-SQL)
W
select
: użyj:W
where
klauzuli użyj:źródło
where Obsolete = 'N' or InStock = 'Y'
i praktycznieZ tego linku możemy zrozumieć
IF THEN ELSE
w T-SQL:Czy to nie wystarczy dla T-SQL?
źródło
źródło
Prosta instrukcja if-else w SQL Server:
Instrukcja zagnieżdżona If ... else w SQL Server -
źródło
SELECT
jak poprosił OP?Nowa funkcja IIF (której możemy po prostu użyć) została dodana w SQL Server 2012:
źródło
Użyj instrukcji CASE:
źródło
Użyj czystej logiki bitowej:
Zobacz działające demo: jeśli nie, to
case
w SQL Server .Na początek musisz obliczyć wartość
true
ifalse
dla wybranych warunków. Oto dwa NULLIF :połączone razem dają 1 lub 0. Następnie użyj operatorów bitowych .
To najbardziej metoda WYSIWYG .
źródło
źródło
źródło
źródło
To nie jest odpowiedź, tylko przykład instrukcji CASE używanej tam, gdzie pracuję. Ma zagnieżdżoną instrukcję CASE. Teraz już wiesz, dlaczego mam skrzyżowane oczy.
źródło
CASE
zostałem uprzywilejowany i oznaczony jako odpowiedź zamiast odpowiedzi,IF
która powinna być odpowiedzią, jak ta, to wciążCASE
stwierdzenie, a nie odpowiedźIF
.Jeśli wstawiasz wyniki do tabeli po raz pierwszy, zamiast przenosić wyniki z jednej tabeli do drugiej, działa to w Oracle 11.2g:
źródło
Jako alternatywne rozwiązanie dla
CASE
instrukcji można zastosować podejście oparte na tabeli:Wynik:
źródło
źródło
Dla tych, którzy korzystają z SQL Server 2012, IIF to funkcja, która została dodana i działa jako alternatywa dla instrukcji Case.
źródło
źródło
W rzeczywistości można to zrobić na dwa sposoby:
Za pomocą IIF, który został wprowadzony z SQL Server 2012:
Używanie
Select Case
:źródło
Pytanie:
ANSI:
Użycie aliasów -
p
w tym przypadku - pomoże uniknąć problemów.źródło
Korzystanie z instrukcji SQL CASE jest jak zwykłe instrukcje If / Else. W poniższym zapytaniu, Jeśli przestarzała wartość = „N” lub Jeśli wartość InStock = „Y”, Wynik wyniesie 1. W przeciwnym razie wynik wyniesie 0. Następnie umieścimy tę wartość 0 lub 1 w kolumnie Salable.
źródło
If..Then...Else..
instrukcji wSQL
następujący sposób ....źródło
Będzie coś takiego:
źródło
SELECT OrderID, Quantity, CASE WHEN Quantity > 30 THEN "The quantity is greater than 30" WHEN Quantity = 30 THEN "The quantity is 30" ELSE "The quantity is under 30" END AS QuantityText FROM OrderDetails WHERE QuantityText = 'The quantity is 30';
Dla kompletności dodam, że SQL używa logiki trójwartościowej. Ekspresja:
Może dać trzy różne wyniki:
Na przykład, jeśli produkt jest przestarzały, ale nie wiesz, czy produkt jest instock, nie wiesz, czy można go sprzedać. Możesz zapisać tę trójwartościową logikę w następujący sposób:
Po ustaleniu, jak to działa, możesz przekonwertować trzy wyniki na dwa, decydując o zachowaniu wartości null. Np. Traktowałoby to zero jako nie do sprzedaży:
źródło
Podoba mi się użycie instrukcji CASE, ale pytanie dotyczy instrukcji IF w SQL Select. W przeszłości korzystałem z:
To jest jak instrukcje IF Excela lub arkusza, w których występuje warunek, po którym następuje warunek prawdziwy, a następnie warunek fałszywy:
Ponadto możesz zagnieżdżać instrukcje if (ale następnie użyj use CASE :-)
(Uwaga: działa to w MySQLWorkbench, ale może nie działać na innych platformach)
źródło
Możesz użyć instrukcji Case Case:
źródło