2016-05-12 12 views
0

ich eine select-Anweisung, die die Anzahl der Verkäufe von Land teilt, priceBanding (siehe Beispiel unten)bekommen avg der Spalte auf der Grundlage des Ergebnisses gesetzt

enter image description here

Die Select-Anweisung sieht wie folgt:

Was ich tun möchte, basiert auf diesem Ergebnis, ich möchte einen Durchschnitt der Stückzahl erhalten, dh Für alle Bestellungen, die unter 20 sind, was zählt die AVG-Einheit und das gleiche für alle anderen. Wie kann ich das machen?

Es ist wahrscheinlich einfach, aber ich kann nicht durchdenken.

Was ich bin nach:

enter image description here

So wie Sie im Preisband sehen < 20 in Großbritannien ist die Reihenfolge Zahl 50 und die avg Einheiten davon ist 2. Wie bereits erwähnt früher möchte ich die Avg-Einheiten aller Bestellungen, die unter 20 sind (das ist 50 im Bild).

Ist das klarer?

Vielen Dank im Voraus.

EDIT:

enter image description here

Die erste Tabelle: annehmen, dass es die Quelle

und die zweite Tabelle sein bekommt die avg, das ist, was ich bin nach.

+3

Können Sie das Ergebnis teilen, das Sie für diese Beispieldaten erhalten möchten? Es ist ein bisschen schwer zu verstehen, was du zu tun versuchst. – Mureinik

+0

Auch p.Id = c.Id und p.ID = s.ID macht irgendeinen Sinn, wo sind die FKs? – Ako

+0

Auch, wenn Sie uns die ursprünglichen Tabellendaten oder zumindest eine Teilmenge davon zeigen, wäre das nett. –

Antwort

0

Würden Sie nicht einfach avg() verwenden?

SELECT p.[Price Band], t.[Country], 
     o.COUNT(*) as [Order Count], 
     AVG(Items) 
FROM #price p INNER JOIN 
    country t 
    ON p.CountryCode = t.countryCode INNER JOIN 
    sales o 
    ON o.salesValue >= p.startPrice and s.salesValue < p.endPrice 
GROUP BY p.[Price Band], t.[Country] 
ORDER BY t.[Country], p.[Price Band] 

Hinweis: SQL Server tun Integer-Division von ganzen Zahlen (so 3/2 = 1 nicht mehr als 1,5) und in ähnlicher Weise für AVG(). Es ist genauer, eine Dezimalpunktnummer zu verwenden. Ein einfacher Weg ist, AVG(items * 1.0) zu verwenden.

+0

Prost. Das ist, was ich gerade vorher, aber ich wollte wissen, ob es einen einfacheren Weg gibt, danke. – Faiz

Verwandte Themen