2016-06-02 11 views
0

Ich verwende Oracle SQL Developer, ich habe eine Tabelle namens Stores, mit einer Standortkennung, die auf eine andere Tabelle namens "Location" verweist, die auf sich selbst verweist, um sein eigenes Land zu identifizieren/Stadt/etc.Zählen mehrere Geschäfte in verschiedenen Ländern Ausgabe

ich zählen möchten, wie viele Geschäfte gibt es in einem bestimmten Land, aber die Abfrage nur zählt, wie viele es sind in der gleichen Stadt

Die Abfrage ist (das Problem ist in der Zählabschnitt, Übersetzung: tienda- Speicher, lugar-Standort):

SELECT ti.nro||' '|| ti.calle as "Direccion",l.nombre "Ciudad", lu.nombre "Pais", 
(SELECT COUNT(*) FROM tienda tie WHERE tie.fk_lugar = l.id) "Cantidad" 

FROM tienda t,THE (SELECT direccion from tienda WHERE tienda.id=t.id) 
ti,lugar l, lugar lu 

WHERE t.fk_lugar=l.id and l.tipo='CIUDAD' and 
l.lugar_id=lu.id and lu.tipo = 'PAIS' 

Das Ergebnis ist so etwas wie dieses:

Direccion |Ciudad |Pais |Cantidad 
address 4|Miami |USA | 1 
address 3|New York|USA | 1 
address 2|Toronto |Canada| 2 
address 1|Toronto |Canada| 2 

Wenn es zeigen sollte:

Direccion |Ciudad |Pais |Cantidad 
address 4|Miami |USA | 2 
address 3|New York|USA | 2 
address 2|Toronto |Canada| 2 
address 1|Toronto |Canada| 2 

ich es zählen gleiche Städte gehe davon aus und ich kann nicht herausfinden, wie es Länder zählen statt

Tienda inserts

Lugar inserts

+2

können Sie bitte Ihren Datensatz zeigen? – SriniV

+0

Bearbeitet, um Datensatzbilder hinzuzufügen @realspirituals – luismzk

+0

Es wäre viel besser, die Daten in Textform zu haben, und vorzugsweise in einem Format, das wir rekonstruieren können. Aber sollte aus diesen Bildern der Cantidad-Wert für alle USA-Läden 3 (von den Geschäften in Chicago, Miami und Dallas) und für alle kanadischen Geschäfte 3 (von den drei Toronto-Läden) sein? Und es sollte Zeilen für alle anderen Geschäfte geben? –

Antwort

2

Ich denke, das tut, was Sie machen wollen:

select t.direccion, lc.nombre as ciudad, lp.nombre as pais, 
     count(*) over (partition by lp.nombre) 
from tienda t join 
    lugar lc 
    on t.fk_lugar = lc.id and lc.tipo = 'CIUDAD' join 
    lugar lp 
    on lc.?? = lp.id and lp.tipo = 'PAIS'; 

Die Schlüsselidee ist die count(*) over. Eine Fensterfunktion führt den gewünschten Zählwert aus. Ich bin unklar von der Frage, was der richtige join Schlüssel für pais ist.

+0

Sorry, habe es nicht klar genug gemacht. lugar l würde auf eine Stadt hinweisen und lugar lu in ein Land. So zeigt lu.id auf die ID-Nummer des Landes. Ich fügte Datensatzbilder für mehr Referenz hinzu – luismzk

+0

fügte falsche Daten vorher hinzu, danke für Ihre Antwort. Es funktioniert jetzt großartig – luismzk

Verwandte Themen