![]() |
Datenbank: Oracle • Version: 10 • Zugriff über: PL/SQL
Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Hallo zusammen,
ich möchte aus einer Tabelle mit zwei Spalten alle Werte einzeln ausgegeben bekommen, die in diesem Interval der beiden Spalten liegen(incl der Intervalgrenzen). Z.B.: Spalte_A | Spalte_B 100 | 110 Ergebnis: 100 101 102 103 104 105 106 107 108 109 110 Geht so etwas mit einem SQL-Statement oder muss ich da auf PL/SQL zurückgreifen? Hat jemand eine Idee? |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Einen interessanten Ansatz habe ich hier gefunden:
![]() |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Hi,
Zitat:
Danke! |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Hallo,
nur ein Schnellschuß:
SQL-Code:
select MeinstDuDas from
( SELECT LEVEL MeinstDuDas FROM test CONNECT BY LEVEL <= greatest(Spalte_a,Spalte_b) ) where MeinstDuDas > (select Least(Spalte_a,Spalte_b) from test) |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Hi,
ich habe mit dem Tip folgende Abfrage zusammen gestellt:
SQL-Code:
Das Problem: Ich bekomme immer nur für einen Eintrag(1396000) aus meiner Tabelle die Werte aufgelistet. Wie kann ich das für alle Einträge aus der Tabelle erweitern?
SELECT l FROM (
SELECT LEVEL l FROM dual CONNECT BY LEVEL < = ( SELECT a.rb_endnummer AS endIndex FROM MeineTabelle a WHERE a.rb_anfangsnummer = '1396000') ) WHERE l >= ( SELECT a.rb_anfangsnummer AS startIndex FROM MeineTabelle a WHERE a.rb_anfangsnummer = '1396000') |
Re: Alle Werte zwischen zwei Zahlen mit SQL ausgeben
Hallo,
Zitat:
Momentan fällt mir da nur ein - Schleife drum machen, für nur SQL weiß ich keine Lösung, eigentlich Schade, wäre sonst so schön einfach. Schaumal, ob die Dir 'ne Idee liefern können: ![]() |
Re: Alle Werte zwischen zwei Zahlen mit SQL ausgeben
Hi,
Zitat:
Danke für den Link! Ich werde mich dort mal umschauen. |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Hi,
für den MS SQL Server gibt es eine Lösung mit einer "tally table". Evtl. hilft das auch hier weiter? ![]() |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Hallo,
einen hab' ich noch, aber bitte dafür nicht hauen:
SQL-Code:
Man nehme das SQL, führe es aus, nehme das Ergebnis und führe es aus.
select * from (
select 'SELECT l FROM (SELECT LEVEL l FROM dual ' ||'CONNECT BY LEVEL <= (' ||'SELECT spalte_b AS endIndex FROM test WHERE spalte_a = '||spalte_a ||')) WHERE l >= (' ||'SELECT spalte_a AS startIndex FROM test WHERE spalte_a = '||spalte_a ||')'||chr(10) ||'union all' as Spalte from test order by spalte_a ) union all select 'select 0 from dual' from dual Nagut, was passiert hier: Es wird mit SQL ein SQL-Statement generiert, das für jede Zeile der Tabelle eine Select ... Level ... generiert, die per union all miteinander verbunden werden. Dadurch ist am Ende ein union all zuviel, das mit einem select 0 from dual "neutralisiert" wird. |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Ach Du Sch**e :shock:. Da würde ich dann doch eher eine SP schreiben.
|
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Zitat:
Selbst das Datenmodell muss zur Entwicklungszeit nicht vollständig bekannt sein, da man die Informationen zum Datenmodell ja letztlich aus der Datenbank holen kann. Aber: is nix für "ach machen wir das mal so", da muss man vorher schon genau planen, was man will. |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Hi,
das mit der tally-Tabelle ist deutlich einfacher (zumindest beim SQL-Server). Einfach (einmalig) eine "Tally"-Tabelle mit einer Spalte "ID" erstellen und mit den Werte 1...x füllen. Dann kann man z.B. wie folgt auswerten:
SQL-Code:
select T.ID, A.*
from tally T, tabelleA A where t.ID between a.Spalte_A und a.Spalte_B |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Zitat:
PS.: Mein Vorschlag oben ist mehr Spielerei, finde es halt immer wieder verblüffend, was man mit SQL so alles hinbekommt. |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Zitat:
Beispiel aus dem o.g. Link(natürlich SQL-Server :-D )
SQL-Code:
Hier wird z.B. ein Kreuzprodukt einer Systemtabelle (enthält alle Spaltennamen der Tabellen in der Master-Datenbank) erstellt, um die tally-Tabelle zu erstellen.
SELECT TOP 11000 --equates to more than 30 years of dates
IDENTITY(INT,1,1) AS N INTO dbo.Tally FROM Master.dbo.SysColumns sc1, Master.dbo.SysColumns sc2 [Edit] Ist vielleicht noch nicht klar geworden: Diese Tabelle wird einmal erstellt und verbleibt in der Datenbank. Dann kann man sie immer wieder auf unterschiedlichste Weise nutzen. vgl. o.g. Link.[/Edit] |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Hallo,
und es geht doch: Gegeben sei folgende Tabelle:
SQL-Code:
mit folgendem Inhalt:
create table tabelle_a_b
( spalte_a int, spalte_b int)
SQL-Code:
Zuerst ermitteln wir den höchsten Wert aus Tabelle_a_b:
insert into tabelle_a_b values(100,110);
insert into tabelle_a_b values(200,220); insert into tabelle_a_b values(1396000,1396010);
SQL-Code:
und erstellen uns nun eine Level-Abfrage aus diesem Ergebnis:
select max(greatest(spalte_a,spalte_b)) as Max_Spalte from tabelle_a_b
SQL-Code:
Nun müssen wir dieses Ergebnis noch mit Tabelle_a_b verbinden:
SELECT LEVEL l FROM dual CONNECT BY LEVEL < = (
select max(greatest(spalte_a,spalte_b)) as Max_Spalte from tabelle_a_b )
SQL-Code:
Als Ergebnis bekommen wir:
select l from (
SELECT LEVEL l FROM dual CONNECT BY LEVEL < = ( select max(greatest(spalte_a,spalte_b)) as Max_Spalte from tabelle_a_b ) ) Tally, tabelle_a_b where Tally.L between tabelle_a_b.Spalte_A and tabelle_a_b.Spalte_B 100 101 102 103 104 105 106 107 108 109 110 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 1396000 1396001 1396002 1396003 1396004 1396005 1396006 1396007 1396008 1396009 1396010 Mit dieser Verfahrensweise benötigen wir keine eigene Tabelle in der Datenbank, bei der wir immer sicherstellen müssen, dass sie auch alle ggfls. erforderlichen Werte enthält. Hoffe, das Ergebnis entspricht der im ersten Post genannten Fragestellung. |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Cool :thumb:
Dann hat der Hinweis auf die "tally"-Tabelle letztendlich doch etwas geholfen :wink: |
Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz