W drugim przypadku, dlaczego działa tylko „IN”, a nie „=”?
Han
25
=działałoby, gdybyś porównywał do pojedynczej wartości. Jednak (22978, 23218, 23219)jest tablicą i INkonieczne jest, aby dopasować tylko jedną z wartości.
LdTrigger
2
To naprawdę śmierdzi - t-sql nie może obsłużyć „lub” w instrukcji case. Przyjdź na czas firmy Microsoft, aby wyrosnąć ze statusu bazy danych zabawek.
Rich Bianco,
1
„nie mogę obsłużyć” lub „w instrukcji case”… hmmm… nie sądzę, żebym kiedykolwiek widział przełącznik, który akceptuje „lub” w dowolnym języku. wydaje się, że pokonałby cel zmiany. jakie języki akceptują „lub” w przypadku?
Heriberto Lugo
2
@Heriberto Lugo Nie wiem, ile znasz języków, ale jest ich co najmniej kilka. VB.NET i C # mogą używać ich z prostą separacją przecinków. Niczego nie pokonuje, ponieważ uratuje cię od powtarzania tego samego kodu w wielu przypadkach za darmo.
pozytywnie oceniany - ta odpowiedź wnosi wartość dodaną. Dokładniej pasuje do pytania OP, a jeśli chcesz zagnieździć niektóre CASE-WHENS, ta składnia znacznie zmniejsza potrzebny kod.
Matt Kemp,
1
@Leigh Doceniam tę odpowiedź. Miło jest mieć wszystkie różne formaty w jednym wątku i sprawia, że jest on bardziej użyteczny jako odniesienie.
Jason Wheeler,
3
@Bigwheels - Wow .. to było jakiś czas temu. Prawdopodobnie się nie zgodziłem, ponieważ logicznie jest dokładnie tak samo, jak inne odpowiedzi . To powiedziawszy, ty i Matt robicie ważne punkty. Jeśli pytanie brzmiało „jaka jest poprawna składnia przy użyciu tylko OR ”, to daje odpowiedź. Jeśli jednak celem było „ograniczenie niezbędnej składni”, akceptowana odpowiedź jest bardziej zwarta. BTW, to nie jest trzask odpowiedzi Darrena, która jest całkowicie poprawna. Tylko moje 0,02 $ :)
Leigh
2
użycie INsłowa kluczowego jest znacznie lepszym sposobem
Możesz użyć jednego z wyrażeń WHEN, ale nie możesz mieszać obu z nich.
KIEDY kiedy_wyrażenie
Jest prostym wyrażeniem, do którego porównywane jest wyrażenie_wejściowe, gdy używany jest prosty format CASE. wyrażenie_czasu jest dowolnym poprawnym wyrażeniem. Typy danych wyrażenia wejściowego i każdego wyrażenia when muszą być takie same lub muszą być konwersją niejawną.
KIEDY wyrażenie logiczne
Czy wyrażenie logiczne jest oceniane podczas korzystania z przeszukiwanego formatu CASE. Wyrażenie boolowskie to dowolne prawidłowe wyrażenie boolowskie.
Możesz zaprogramować:
1.
CASE ProductLineWHEN'R'THEN'Road'WHEN'M'THEN'Mountain'WHEN'T'THEN'Touring'WHEN'S'THEN'Other sale items'ELSE'Not for sale'
Istnieje już wiele odpowiedzi w odniesieniu do CASE. Wyjaśnię, kiedy i jak korzystać CASE.
Możesz używać wyrażeń CASE w dowolnym miejscu zapytań SQL. Wyrażeń CASE można używać w instrukcjach SELECT, klauzulach WHERE, klauzulach Sortuj według, klauzul HAVING, instrukcjach Insert, UPDATE i DELETE.
Wyrażenie CASE ma następujące dwa formaty:
Proste wyrażenie CASE
CASE expressionWHEN expression1 THEN Result1WHEN expression2 THEN Result2ELSE ResultNEND
To porównuje wyrażenie do zestawu prostych wyrażeń, aby znaleźć wynik. To wyrażenie porównuje wyrażenie do wyrażenia w każdej klauzuli WHEN pod kątem równoważności. Jeśli wyrażenie w klauzuli WHEN jest dopasowane, wyrażenie w klauzuli THEN zostanie zwrócone.
To tutaj spada pytanie PO. 22978 OR 23218 OR 23219nie otrzyma wartości równej wyrażeniu tj. ebv.db_no. Dlatego daje błąd. Typy danych wyrażenia wejściowego i każdego wyrażenia when muszą być takie same lub muszą być konwersją niejawną.
Szukano wyrażeń CASE
CASEWHEN Boolean_expression1 THEN Result1WHEN Boolean_expression2 THEN Result2ELSE ResultNEND
To wyrażenie ocenia zestaw wyrażeń boolowskich w celu znalezienia wyniku. To wyrażenie pozwala operatorom porównania oraz operatorom logicznym AND / OR z każdym wyrażeniem logicznym.
Uaktualnianie z powodu włączenia ELSE Salespola, które zwraca wartość domyślną, jeśli nie jest zawarte w instrukcji case, odpowiednie dla zapytań biznesowych.
FoxDeploy
3
select id,phno,case genderwhen'G'then'M'when'L'then'F'else'No gender'endas gender from contacts
Dlaczego nie wyjaśniacie, co się tutaj robi? Ważne jest, aby udzielić kompletnych odpowiedzi z Objaśnieniami, ponieważ niektórzy nowicjusze mogą tego potrzebować, aby zrozumieć, jak to rozwiązuje problem
Gerhard Barnard
3
UPDATE table_name
SET column_name=CASEWHEN column_name in('value1','value2',.....)THEN'update_value'WHEN column_name in('value1','value2',.....)THEN'update_value'END
table_name = Nazwa tabeli, na której chcesz wykonać operację.
column_name = Nazwa kolumny / pola, której wartość chcesz ustawić.
update_value = Wartość, którą chcesz ustawić column_name
Chociaż ten kod może rozwiązać problem PO, kilka słów wyjaśnienia byłoby jeszcze bardziej przydatne dla przyszłych czytelników.
Thom,
-5
Select s.stock_code,s.stock_desc,s.stock_desc_ar,
mc.category_name,s.sel_price,casewhen s.allow_discount=0then'Non Promotional Item'else'Prmotional
item'end'Promotion'From tbl_stock s innerjoin tbl_stock_category c on s.stock_id=c.stock_id
innerjoin tbl_category mc on c.category_id=mc.category_id
where mc.category_id=2and s.isSerialBased=0
Odpowiedzi:
Ten format wymaga użycia:
W przeciwnym razie użyj:
źródło
=
działałoby, gdybyś porównywał do pojedynczej wartości. Jednak(22978, 23218, 23219)
jest tablicą iIN
konieczne jest, aby dopasować tylko jedną z wartości.źródło
IN
słowa kluczowego jest znacznie lepszym sposobemźródło
Możesz użyć jednego z wyrażeń WHEN, ale nie możesz mieszać obu z nich.
KIEDY kiedy_wyrażenie
Jest prostym wyrażeniem, do którego porównywane jest wyrażenie_wejściowe, gdy używany jest prosty format CASE. wyrażenie_czasu jest dowolnym poprawnym wyrażeniem. Typy danych wyrażenia wejściowego i każdego wyrażenia when muszą być takie same lub muszą być konwersją niejawną.
KIEDY wyrażenie logiczne
Czy wyrażenie logiczne jest oceniane podczas korzystania z przeszukiwanego formatu CASE. Wyrażenie boolowskie to dowolne prawidłowe wyrażenie boolowskie.
Możesz zaprogramować:
1.
2)
Ale w każdym razie można oczekiwać, że ranking zmiennych zostanie porównany w wyrażeniu logicznym.
Zobacz CASE (Transact-SQL) (MSDN).
źródło
Istnieje już wiele odpowiedzi w odniesieniu do
CASE
. Wyjaśnię, kiedy i jak korzystaćCASE
.Możesz używać wyrażeń CASE w dowolnym miejscu zapytań SQL. Wyrażeń CASE można używać w instrukcjach SELECT, klauzulach WHERE, klauzulach Sortuj według, klauzul HAVING, instrukcjach Insert, UPDATE i DELETE.
Wyrażenie CASE ma następujące dwa formaty:
Proste wyrażenie CASE
To porównuje wyrażenie do zestawu prostych wyrażeń, aby znaleźć wynik. To wyrażenie porównuje wyrażenie do wyrażenia w każdej klauzuli WHEN pod kątem równoważności. Jeśli wyrażenie w klauzuli WHEN jest dopasowane, wyrażenie w klauzuli THEN zostanie zwrócone.
To tutaj spada pytanie PO.
22978 OR 23218 OR 23219
nie otrzyma wartości równej wyrażeniu tj. ebv.db_no. Dlatego daje błąd. Typy danych wyrażenia wejściowego i każdego wyrażenia when muszą być takie same lub muszą być konwersją niejawną.Szukano wyrażeń CASE
To wyrażenie ocenia zestaw wyrażeń boolowskich w celu znalezienia wyniku. To wyrażenie pozwala operatorom porównania oraz operatorom logicznym AND / OR z każdym wyrażeniem logicznym.
1. Instrukcja SELECT z wyrażeniami CASE
2. Instrukcja aktualizacji z wyrażeniem CASE
3. Klauzula ORDER BY z wyrażeniami CASE
4. Klauzula z wyrażeniem CASE
Mam nadzieję, że te przypadki użycia pomogą komuś w przyszłości.
Źródło
źródło
Próbować
źródło
źródło
ELSE Sales
pola, które zwraca wartość domyślną, jeśli nie jest zawarte w instrukcji case, odpowiednie dla zapytań biznesowych.źródło
table_name
= Nazwa tabeli, na której chcesz wykonać operację.column_name
= Nazwa kolumny / pola, której wartość chcesz ustawić.update_value
= Wartość, którą chcesz ustawićcolumn_name
źródło
źródło