2016-08-09 10 views
0

Ich versuche, eine Abfrage wie dieseeine Summe auf Zeilen mit Bedingung

select sum(t1.quantity) - sum(t2.quantity * SELECT CASE WHEN (condition on t3.status) THEN 1 ELSE 0 END)),0) 
from table1 t1 
inner join table2 t2 on t1.key = t2.key 
inner join table3 t3 on t2.key = t3.key 

Grundsätzlich zu schaffen, was es eine Subtraktion zwischen dem ersten tun ist, einige t2.quantity einige, und eine zweite, die in Reihen sind, dass habe eine Bedingung für die Spalte t3.status (zum Beispiel t3.status> 2).

Aber ich bin immer

Kann nicht eine Aggregatfunktion auf einem Ausdruck führen eine Aggregat oder eine Unterabfrage enthält.

Gibt es eine Möglichkeit, dies ohne zusätzliche Join oder andere Abfrage hinzufügen?

+0

meinst du, wenn conditon wahr ist, dann t2.quantity * 1, sonst t2.quantity * 0? – Grace

+0

ja so wird es die Menge der Menge sein, wo die Bedingung verifiziert wird – AnotherGeek

+1

Die von Ihnen gepostete select-Anweisung ist nicht gültig. Es sieht so aus, als gäbe es da noch ein paar Extras, vielleicht ein ISNULL? Sie scheinen auch eine Unterabfrage zu haben, aber die Syntax ist auch dort nicht gültig. Ich denke, dass du das für das Posting so vereinfacht hast, dass du viele Details ausgelassen hast. –

Antwort

0

Ich denke, das ist, was Sie versuchen, zu tun. Sie benötigen kein select erneut bei Verwendung case als t3 ist bereits verbunden.

select sum(t1.quantity) - sum(t2.quantity * CASE WHEN t3.status > 2 THEN 1 ELSE 0 END) 
from table1 t1 
inner join table2 t2 on t1.key = t2.key 
inner join table3 t3 on t2.key = t3.key 
Verwandte Themen