TabellenschemaWie ROLLUP- RANK() mit Pivot-Tabelle in Oracle11g
CREATE TABLE customer (
id NUMERIC,
lname VARCHAR (30),
fname VARCHAR (30) NOT NULL,
street VARCHAR (30) NOT NULL,
city VARCHAR (30) NOT NULL,
zipcode NUMERIC (5) NOT NULL,
state VARCHAR (2) NOT NULL,
phone VARCHAR (12) NOT NULL,
creditscore NUMERIC,
credit_org VARCHAR (30),
cs_date DATE,
CONSTRAINT customer_pk PRIMARY KEY (id)
);
Anforderung verwenden:
Teil 1: erstellen eine Pivot-Tabelle die Anzahl der Kunden nach Ort zur Liste ('PA ',' CA ',' NY ',' MD ') und auch nach creditscore range. Für creditscore Bereich, erstellen Sie 3 Segmente, "LOWER RANGE (500-600)" definiert als diejenigen mit Kredit-Score zwischen 500-600, "AVERAGE RANGE (600-700)" definiert als diejenigen mit Kredit-Score zwischen 600-700, 'PREMIUM RANGE (700+) 'definiert als solche mit einem Kredit-Score von 700+. Das Ergebnis der Pivot-Tabelle sollte 4 Spalten für Status und 3 Zeilen für den Creditscore-Bereich enthalten.
Teil 2: Fügen Sie eine Gesamtreihe hinzu, um die Gesamtzahl der Kunden für die jeweiligen Bundesstaaten anzugeben. Rangieren Sie die Bundesstaaten basierend auf der Gesamtzahl der Kunden.
Zusätzliche Anforderung Rangieren Sie die Staaten basierend auf der Gesamtzahl der Kunden zuerst im Premium-Bereich, dann durchschnittliche Reichweite und dann niedrigere Reichweite.
Meine Meinung Bisher
SELECT * FROM (
SELECT case
when CREDITSCORE between 500 and 600 then 'LOWER RANGE(500-600)'
when CREDITSCORE <= 700 then 'AVERAGE RANGE(600-700)'
else 'PREMIUM RANGE(700+)'
end as CREDITSCORE_RANGE,
state
FROM customer
)
PIVOT (
count(state) FOR state IN ('PA', 'CA', 'NY', 'MD')
);
Es ist richtig, zum Teil 1
Meine Frage ist, wie Teil 2 in Angriff zu nehmen und Ist es überhaupt möglich?
Edit 1:
MY oben unter Verwendung von DECODE
SELECT DECODE (Fall nehmen, wenn Kreditscoring < = 600 dann 'LOWER RANGE (500-600)' wenn Kreditscoring < = 700 dann ‚AVERAGE RANGE (600-700)‘ else 'premium RANGE (700+)' Ende, NULL, 'Total', Fall wenn Kreditscoring zwischen 500 und 600 dann 'LOWER RANGE (500-600)' wenn Kreditscoring < = 700 dann 'DURCHSCHNITTLICHE BEREICH (600-700)' sonst 'PREMIUM RANGE (700+)' Ende) "CREDITSCORE_RANGE", SUM (DECODE (Zustand, 'PA', 1, 0)) "Pennsylvania", SUM (DECODE (Zustand, 'CA', 1, 0)) "California", SUMME (DECODE (Zustand, 'NY', 1, 0)) "New York", SUMME (DECODE (Zustand, 'MD', 1, 0)) "Maryland", zählen (Kreditscoring) "gesamte Anzahl der Kunden," RANK() OVER (ORDER BY Count (Kreditscoring) DESC) "RANK durch NO oF CUSTOMERS" FROM Kunden GROUP BY ROLLUP- (Fall wenn Kreditscoring zwischen 500 und 600 dann ‚LOWER BEREICH (500-600) ' wenn CREDITSCORE < = 700 dann' DURCHSCHNITTLICHE BEREICH (600-700) ' sonst' PREMIUM BEREICH (700+) ' Ende);
Vielen Dank für Ihre Antwort. Und Beispieldaten haben keinen Creditscore <500, aber es ist sinnvoll, die Bereiche wie vorgeschlagen zu ändern. Ich habe einen Versuch durch DECODE gemacht. Ich setze es mit der Bearbeitung. Aber ich werde Sie fragen, ob Sie eine Lösung bereitstellen können, indem Sie wie vorgeschlagen einen anderen Weg einschlagen. Es macht mehr Sinn, aber ich bin mir nicht sicher, wie ich es angehen soll. Vielen Dank –