2017-08-03 23 views
0

Ich versuche, diese Erklärung zu bekommen zu arbeiten, aber es sagte, ich habe Fehler bei „INV.CaseQty = 1“SQL CASE WHEN Statement

ich es auf die Logik erhalten möchten:

when x = 1 then y = 1 else y 

CASE WHEN INV.CaseUp = 1 then INV.CaseQty = 1 ELSE INV.CaseQty end 

Würde schätzen die Hilfe aller

Hier meine SELECT-Abfrage aus einer gespeicherten Prozedur ist

select C.CustomerNum, ISNULL(ST.ShiptoNum,'') Shipto, I.InvoiceNum, 
     DatePart(yyyy,I.InvoiceDate) DeliveryYear, 
     DatePart(qq,I.InvoiceDate) DeliveryQuarter, 
     DatePart(MM,I.InvoiceDate) DeliveryMonth, 
     DatePart(WW,I.InvoiceDate) DeliveryWeek, 
     CAST(I.InvoiceDate as Date) DeliveryDate, INV.InventoryNum, 
     IP.InventoryPackageNum, ISNULL(CaseQty, 0) QTYinEach, 
     ID.Description,ISNULL(IT.Description,'No Type') SubCategory, 
     CASE WHEN INV.CaseUp = 1 then INV.CaseQty = 1 
      ELSE INV.CaseQty 
     end 

original tabl

e
Description        CaseQty  caseup 
Royal 5" Red Stripe Plastic Sip Stirrer 1000   1 
Ecoproducts Plant Starch Knife   1000   0 
Ecoproducts Plant Starch Fork   1000   1 
Ecoproducts Plant Starch Spoon   1000   0 

ich die SELECT-Abfrage von meinem Speicher Verfahren wollen die mit CaseUp = 1, sollte CaseQty Änderung auch in der Lage sein zu ändern 1 sein.

+0

was wollen Sie erreichen, ist es eine Select-Anweisung? Veröffentlichen Sie die vollständige Abfrage für passende Antworten –

+0

Ja, ich möchte es in einer Select-Anweisung verwenden. Wenn ich also eine IF-Anweisung ausführen soll, kann ich sie nicht in eine select-Anweisung einfügen. Ich könnte nur CASE verwenden, wie es scheint. Wie arbeite ich das an? – kate

+0

Veröffentlichen Sie Ihre ausgewählte Abfrage, um anzuzeigen, was Sie erreichen möchten, oder atleast Tabellendaten und Ergebnisdaten nach Abfrage, um Ihre Anforderung zu verstehen –

Antwort

2

Sie können nicht „einen Wert“ als Versuch, mit INV.CaseQty = 1 zu tun, werden Sie Auswählen von Werten aus einer Tabelle

SELECT CASE WHEN INV.CaseUp = 1 THEN 1 ELSE INV.CaseQty END as CaseQty 
0

Die Logik, die Sie beschreiben, ist inkohärent: in der THEN-Klausel Sie eine Operation durchführen In der ELSE-Klausel geben Sie jedoch einen Wert zurück, und diese Aktionen sind nicht kompatibel.

Der Zuordnungsprozess würde über die Struktur IF ... ELSE erfolgen; die Rückgabe verschiedener Werte basierend auf Bedingungen würde über die CASE-Struktur erfolgen.

+0

aber OP erwähnt nicht die Verwendung von PLSQL –

+0

Weder habe ich;) – Brian

+0

wie kann man sonst in SQL-Abfrage verwenden (ich weiß das nicht möglich). –

0

es irgendwie sieht aus wie Sie es brauchen für where-Klausel vielleicht wie:

where 
((INV.CaseUp = 1 and INV.CaseQty = 1) or INV.CaseUp <> 1)