Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Alle Werte zwischen zwei ZAhlen mit SQL ausgeben (https://www.delphipraxis.net/122447-alle-werte-zwischen-zwei-zahlen-mit-sql-ausgeben.html)

barnti 16. Okt 2008 09:57

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?

DeddyH 16. Okt 2008 10:56

Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
 
Einen interessanten Ansatz habe ich hier gefunden:http://problemlos.ch/wp/2006/03/31/o...ql-zaubereien/

barnti 16. Okt 2008 11:02

Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
 
Hi,

Zitat:

Zitat von DeddyH
Einen interessanten Ansatz habe ich hier gefunden:http://problemlos.ch/wp/2006/03/31/o...ql-zaubereien/

Echt beeindruckend! Jetzt muss ich es nur noch verstehen damit ich es für meine Zwecke gebrauchen kann!

Danke!

nahpets 16. Okt 2008 12:29

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)

barnti 16. Okt 2008 12:30

Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
 
Hi,
ich habe mit dem Tip folgende Abfrage zusammen gestellt:
SQL-Code:
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')
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?

nahpets 16. Okt 2008 13:35

Re: Alle Werte zwischen zwei Zahlen mit SQL ausgeben
 
Hallo,
Zitat:

Zitat von barnti
SQL-Code:
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')
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?

befürchte, dass das nicht geht, da die inneren Selects nur eine Zeile als Ergebnis liefern dürfen.
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: www.sqlsnippets.com

barnti 16. Okt 2008 13:38

Re: Alle Werte zwischen zwei Zahlen mit SQL ausgeben
 
Hi,
Zitat:

Zitat von nahpets
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?
befürchte, dass das nicht geht, da die inneren Selects nur eine Zeile als Ergebnis liefern dürfen.
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: www.sqlsnippets.com

Das hatte ich befürchtet. Damit kann ich dann auch jeden Datensatz per Cursor holen und dann in einer Schleife die einzelnen Einträge erstellen.

Danke für den Link! Ich werde mich dort mal umschauen.

NormanNG 16. Okt 2008 13:50

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? Link

nahpets 16. Okt 2008 15:24

Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
 
Hallo,

einen hab' ich noch, aber bitte dafür nicht hauen:

SQL-Code:
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
Man nehme das SQL, führe es aus, nehme das Ergebnis und führe es aus.

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.

DeddyH 16. Okt 2008 15:29

Re: Alle Werte zwischen zwei ZAhlen mit SQL ausgeben
 
Ach Du Sch**e :shock:. Da würde ich dann doch eher eine SP schreiben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz