So frage ich mich, gibt es eine Möglichkeit, Zeilen mit Bereichen zu zählen, die sich nicht gegenseitig ausschließen? (Wahrscheinlich schlechte Formulierung)SQL - Zählen mit Bereichen, aber nicht ausschließlich
Lassen Sie uns sagen, dass ich die folgenden Tabellen:
_ValueA_,_ValueB_,_ValueC_
E1 | 1 | 0
E2 | 6 | 1
E3 | 12 | 4
E4 | 23 | 2
_ValueX_,_ValueY_
X1 | 0
X2 | 1
X3 | 4
X4 | 2
Und ich möchte folgendes Ergebnis:
_VRange_,_ValueA_,_ValueB_,_ValueC_,_ValueX_
<5 | E1 | 1 | 0 | X1
<10 | E1 | 1 | 0 | X1
<10 | E2 | 6 | 1 | X2
<15 | E1 | 1 | 0 | X1
<15 | E2 | 6 | 1 | X2
<15 | E3 | 12 | 4 | X3
....
Was ich versucht zu tun ist eine verschachtelte CASE WHEN
Anweisung verwenden,
CASE WHEN ValueA < 5 THEN '<5' VRange ELSE
CASE WHEN ValueA < 10 THEN '<10' ELSE
-- Nested to 20
END
END
aber da ist das exklusiv (In dem Sinne, wenn Ihre ValueA
ist über 10, es ist auch über 5 so wird es nie in die < 10 Zweigstellen)
ich einfach auch versucht, ein UNION
wähle mit nach WHERE
Klauseln verwenden, aber das machte die Abfrage langsam zu einem Schleichen, weil es in Folge in einem Set, das im Grunde genommen die Kardinalität meiner Tabelle (n) war, war es zehn, außerdem war es schrecklich lang wegen der Join.
Es gibt einen besseren Weg!
Ich bin auf einer Oracle DB, ich möchte vermeiden, Oracle-spezifische Syntax zu verwenden, aber ich kann, wenn das eine kürzere Abfrage bietet, konnte ich wirklich nichts für meine Zwecke finden, obwohl.
Irgendwelche Ideen?
zu Beginn des Falles Ausdruck setzen Sie Ihre größten Werte. Ie. 'case wenn valuea> 20 dann '> 20' wenn valuea <10 dann '<10' ... end '. Außerdem müssen Sie Ihre Fallausdrücke nicht verschachteln. Sie können mehrere when-Klauseln haben! Oracle stoppt, wenn es die erste when-Klausel erreicht, die übereinstimmt. – Boneist
Aber genau das will ich nicht, ich will die Wiederholung. Ich habe ein paar verschiedene Klauseln (<5, <10, <15, <20) und wenn ich einen Wert wie 3 habe, möchte ich den Wert in meinem Ergebnis 4 mal jeweils mit dem <5 in der 'VRange'-Spalte erscheinen . Außerdem dachte ich, ich müsste meine Fälle nisten, um sie in eine einzige Spalte zu bringen? – Wep0n
In diesem Fall müssen Sie Ihre Bereiche in einer Unterabfrage definieren und dann Ihre Tabelle mit diesen Bereichen verbinden, was Gordon in seiner Antwort zeigt. – Boneist