2016-04-12 23 views
0

Ich versuche, individuelle Preise zu summieren und für einen Rabatt Logik verwenden.SQL-Anweisung SELECT, Spalten basierend auf anderen Spalten Berechnung

SELECT O.OrderID, 
    if(C.IsClubMember & OrderNumber % 10 = 0, 0.5 * Sum(I.ItemPrice), Sum(I.ItemPrice)) as Price, 
    0.07*Price as Tax, Price + Tax as Total 
FROM Orders as O JOIN ItemPriceView as I 
    ON O.OrderID = I.OrderID JOIN Customer as C 
    ON O.CustomerID = C.CustomerID 
GROUP BY OrderID 

Ich erhalte eine Fehlermeldung:

Error Code: 1054. Unknown column 'Price' in 'field list' 

Was ist der richtige Weg, um meine Abfrage zu schreiben?

+0

Sie nicht Aliase in der 'select' Klausel wiederverwenden können. –

+0

Also muss ich nur kopieren kopieren Sie die gesamte logische Klausel in jeden Teil der Auswahl? Muss ich eine Zwischenansicht machen, um den Preis zu halten, und später Steuern und Gesamtsumme? –

+0

Sie können einfach die Logik in der SELECT-Klausel kopieren/einfügen –

Antwort

1

Eine Lösung ist eine Unterabfrage zu verwenden, um den Preis zu berechnen, dann Steuern und insgesamt in der äußeren Abfrage berechnen.

sollte diese Arbeit:

SELECT OrderID, Price, 0.07*Price as Tax, 1.07*Price as Total 
FROM 
(
SELECT O.OrderID as OrderID, 
    if(C.IsClubMember & OrderNumber % 10 = 0, 0.5 * Sum(I.ItemPrice),Sum(I.ItemPrice)) as Price 
FROM Orders as O JOIN ItemPriceView as I 
    ON O.OrderID = I.OrderID JOIN Customer as C 
    ON O.CustomerID = C.CustomerID 
GROUP BY OrderID 
) as sub_query 
Verwandte Themen