Warum funktioniert im zweiten Fall nur 'IN' und nicht '='?
Han
25
=würde funktionieren, wenn Sie mit einem einzelnen Wert vergleichen würden. Ist (22978, 23218, 23219)jedoch ein Array und INmuss nur mit einem der Werte übereinstimmen.
LdTrigger
2
Das stinkt wirklich - t-sql kann kein "oder" in einer case-Anweisung verarbeiten. Kommen Sie zu Microsoft, um aus dem Status der Spielzeugdatenbank erwachsen zu werden.
Rich Bianco
1
"kann nicht mit einem" oder "in einer case-Anweisung umgehen" .. hmmm .... ich glaube nicht, dass ich jemals einen Schalter gesehen habe, der ein "oder" in irgendeiner Sprache akzeptiert. scheint den Zweck eines Schalters zu vereiteln. Welche Sprachen akzeptieren "oder" in einem Fall?
Heriberto Lugo
2
@Heriberto Lugo Ich weiß nicht, wie viele Sprachen du kennst, aber es gibt mindestens einige. VB.NET und C # können sie mit einfacher Kommatrennung verwenden. Es besiegt nichts, da es Sie davor bewahrt, denselben Code in mehreren Fällen umsonst zu wiederholen.
upvoted - diese Antwort bietet Mehrwert. Es passt besser zur Frage des OP, und wenn Sie einige CASE-WHENS verschachteln möchten, reduziert diese Syntax den erforderlichen Code erheblich.
Matt Kemp
1
@Leigh Ich schätze diese Antwort. Es ist schön, all die verschiedenen Formate in einem Thread zu haben und macht es als Referenz benutzerfreundlicher.
Jason Wheeler
3
@ Bigwheels - Wow .. das war vor einer Weile. Ich war wahrscheinlich anderer Meinung, weil es logischerweise genau das gleiche ist wie andere Antworten . Das heißt, Sie und Matt machen gültige Punkte. Wenn die Frage lautete: "Was ist die richtige Syntax, wenn nur ODER verwendet wird? ", Gibt dies eine Antwort. Wenn jedoch "Reduzieren der erforderlichen Syntax" das Ziel war, ist die akzeptierte Antwort kompakter. Übrigens ist es kein Slam auf Darrens Antwort, was vollkommen gültig ist. Nur meine $ 0.02 :)
Sie können einen der Ausdrücke von WHEN verwenden, aber Sie können nicht beide mischen.
WANN wenn_Ausdruck
Ist ein einfacher Ausdruck, mit dem input_expression verglichen wird, wenn das einfache CASE-Format verwendet wird. when_expression ist ein gültiger Ausdruck. Die Datentypen von input_expression und jeder when_expression müssen identisch sein oder eine implizite Konvertierung sein.
WENN Boolescher_Ausdruck
Wird der Boolesche Ausdruck ausgewertet, wenn das gesuchte CASE-Format verwendet wird? Boolean_expression ist ein gültiger Boolescher Ausdruck.
Sie könnten programmieren:
1.
CASE ProductLine
WHEN'R'THEN'Road'WHEN'M'THEN'Mountain'WHEN'T'THEN'Touring'WHEN'S'THEN'Other sale items'ELSE'Not for sale'
Es gibt bereits viele Antworten in Bezug auf CASE. Ich werde erklären, wann und wie man es benutzt CASE.
Sie können CASE-Ausdrücke überall in den SQL-Abfragen verwenden. CASE-Ausdrücke können in den Anweisungen SELECT, WHERE, Order by, HAVING, Insert, UPDATE und DELETE verwendet werden.
Ein CASE-Ausdruck hat die folgenden zwei Formate:
Einfacher CASE-Ausdruck
CASE expression
WHEN expression1 THEN Result1
WHEN expression2 THEN Result2
ELSE ResultN
END
Dies vergleicht einen Ausdruck mit einer Reihe einfacher Ausdrücke, um das Ergebnis zu finden. Dieser Ausdruck vergleicht einen Ausdruck mit dem Ausdruck in jeder WHEN-Klausel für die Äquivalenz. Wenn der Ausdruck in der WHEN-Klausel übereinstimmt, wird der Ausdruck in der THEN-Klausel zurückgegeben.
Hier fällt die Frage des OP. 22978 OR 23218 OR 23219erhält keinen Wert, der dem Ausdruck ie ebv.db_no entspricht. Deshalb gibt es einen Fehler. Die Datentypen von input_expression und jeder when_expression müssen identisch sein oder eine implizite Konvertierung sein.
Gesuchte CASE-Ausdrücke
CASEWHEN Boolean_expression1 THEN Result1
WHEN Boolean_expression2 THEN Result2
ELSE ResultN
END
Dieser Ausdruck wertet eine Reihe von booleschen Ausdrücken aus, um das Ergebnis zu finden. Dieser Ausdruck ermöglicht Vergleichsoperatoren und logische Operatoren AND / OR mit in jedem Booleschen Ausdruck.
1.SELECT-Anweisung mit CASE-Ausdrücken
--Simple CASE expression: SELECT FirstName, State=(CASE StateCode
WHEN'MP'THEN'Madhya Pradesh'WHEN'UP'THEN'Uttar Pradesh'WHEN'DL'THEN'Delhi'ELSENULLEND), PayRate
FROM dbo.Customer
-- Searched CASE expression:SELECT FirstName,State=(CASEWHEN StateCode ='MP'THEN'Madhya Pradesh'WHEN StateCode ='UP'THEN'Uttar Pradesh'WHEN StateCode ='DL'THEN'Delhi'ELSENULLEND), PayRate
FROM dbo.Customer
2. Update-Anweisung mit CASE-Ausdruck
-- Simple CASE expression: UPDATE Customer
SET StateCode =CASE StateCode
WHEN'MP'THEN'Madhya Pradesh'WHEN'UP'THEN'Uttar Pradesh'WHEN'DL'THEN'Delhi'ELSENULLEND-- Simple CASE expression: UPDATE Customer
SET StateCode =CASEWHEN StateCode ='MP'THEN'Madhya Pradesh'WHEN StateCode ='UP'THEN'Uttar Pradesh'WHEN StateCode ='DL'THEN'Delhi'ELSENULLEND
Upvoting aufgrund der Aufnahme eines ELSE SalesFelds, das den Standardwert zurückgibt, wenn er nicht in einer case-Anweisung enthalten ist, die für Geschäftsanfragen geeignet ist.
FoxDeploy
3
select id,phno,case gender
when'G'then'M'when'L'then'F'else'No gender'endas gender
from contacts
Warum erklären Sie nicht, was hier gemacht wird? Es ist wichtig, vollständige Antworten mit Erklärungen zu geben, da einige Neulinge dies möglicherweise benötigen, um zu verstehen, wie dies das Problem löst
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 = Der Name der Tabelle, für die Sie eine Operation ausführen möchten.
column_name = Der Name der Spalte / des Felds, dessen Wert Sie festlegen möchten.
update_value = Der Wert, den Sie einstellen möchten column_name
Während dieser Code das Problem des OP lösen kann, wären einige erklärende Worte für zukünftige Leser noch hilfreicher.
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
Antworten:
Für dieses Format müssen Sie entweder Folgendes verwenden:
Andernfalls verwenden Sie:
quelle
=
würde funktionieren, wenn Sie mit einem einzelnen Wert vergleichen würden. Ist(22978, 23218, 23219)
jedoch ein Array undIN
muss nur mit einem der Werte übereinstimmen.quelle
IN
Keyword ist viel besseren Wegquelle
Sie können einen der Ausdrücke von WHEN verwenden, aber Sie können nicht beide mischen.
WANN wenn_Ausdruck
Ist ein einfacher Ausdruck, mit dem input_expression verglichen wird, wenn das einfache CASE-Format verwendet wird. when_expression ist ein gültiger Ausdruck. Die Datentypen von input_expression und jeder when_expression müssen identisch sein oder eine implizite Konvertierung sein.
WENN Boolescher_Ausdruck
Wird der Boolesche Ausdruck ausgewertet, wenn das gesuchte CASE-Format verwendet wird? Boolean_expression ist ein gültiger Boolescher Ausdruck.
Sie könnten programmieren:
1.
2.
In jedem Fall können Sie jedoch erwarten, dass die Variablenrangfolge in einem booleschen Ausdruck verglichen wird.
Siehe CASE (Transact-SQL) (MSDN).
quelle
Es gibt bereits viele Antworten in Bezug auf
CASE
. Ich werde erklären, wann und wie man es benutztCASE
.Sie können CASE-Ausdrücke überall in den SQL-Abfragen verwenden. CASE-Ausdrücke können in den Anweisungen SELECT, WHERE, Order by, HAVING, Insert, UPDATE und DELETE verwendet werden.
Ein CASE-Ausdruck hat die folgenden zwei Formate:
Einfacher CASE-Ausdruck
Dies vergleicht einen Ausdruck mit einer Reihe einfacher Ausdrücke, um das Ergebnis zu finden. Dieser Ausdruck vergleicht einen Ausdruck mit dem Ausdruck in jeder WHEN-Klausel für die Äquivalenz. Wenn der Ausdruck in der WHEN-Klausel übereinstimmt, wird der Ausdruck in der THEN-Klausel zurückgegeben.
Hier fällt die Frage des OP.
22978 OR 23218 OR 23219
erhält keinen Wert, der dem Ausdruck ie ebv.db_no entspricht. Deshalb gibt es einen Fehler. Die Datentypen von input_expression und jeder when_expression müssen identisch sein oder eine implizite Konvertierung sein.Gesuchte CASE-Ausdrücke
Dieser Ausdruck wertet eine Reihe von booleschen Ausdrücken aus, um das Ergebnis zu finden. Dieser Ausdruck ermöglicht Vergleichsoperatoren und logische Operatoren AND / OR mit in jedem Booleschen Ausdruck.
1.SELECT-Anweisung mit CASE-Ausdrücken
2. Update-Anweisung mit CASE-Ausdruck
3.ORDER BY-Klausel mit CASE-Ausdrücken
4.Having-Klausel mit CASE-Ausdruck
Hoffe, dass diese Anwendungsfälle jemandem in Zukunft helfen werden.
Quelle
quelle
Versuchen
quelle
quelle
ELSE Sales
Felds, das den Standardwert zurückgibt, wenn er nicht in einer case-Anweisung enthalten ist, die für Geschäftsanfragen geeignet ist.quelle
table_name
= Der Name der Tabelle, für die Sie eine Operation ausführen möchten.column_name
= Der Name der Spalte / des Felds, dessen Wert Sie festlegen möchten.update_value
= Der Wert, den Sie einstellen möchtencolumn_name
quelle
quelle