Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL -> Ein Unterabfrage soll immer 1 und 2 liefern (https://www.delphipraxis.net/106708-sql-ein-unterabfrage-soll-immer-1-und-2-liefern.html)

HolgerCW 15. Jan 2008 12:26

Datenbank: ORACLE • Version: 10 • Zugriff über: BDE

SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Hallo zusammen,

wie bekomme ich es hin das in einer SQL-Abfrage eine Unterabfrage für die erste Zeile eine 1, die zweite eine 2, die dritte eine 1, die vierte eine 2 u.s.w. liefert ...

Gruss

Holger

DeddyH 15. Jan 2008 12:35

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
SQL-Code:
SELECT (CASE MOD(ROWNUM,2) WHEN 1 THEN 1 ELSE 2 END) AS Bla FROM Tabelle

HolgerCW 15. Jan 2008 13:16

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Das klappt nur halb.

Die erste zeile ist wohl Zeile 0 und da macht er dann auch eine 1 draus.

Hast Du dafür eine Lösung ?

Gruss

Holger

stifflersmom 15. Jan 2008 13:18

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Zitat:

Zitat von HolgerCW
Das klappt nur halb.

Die erste zeile ist wohl Zeile 0 und da macht er dann auch eine 1 draus.

Hast Du dafür eine Lösung ?

Gruss

Holger

Nur als Idee, geht vielleicht ROWNUM+1 ?
Dann gäbe es ja keine 0

mkinzler 15. Jan 2008 13:20

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Dann fange diesen Fall doch auch noch ab
SQL-Code:
SELECT ( case when ROWNUM > 0 then (CASE MOD(ROWNUM,2) WHEN 1 THEN 1 ELSE 2 END) ELSE 2 END) AS Bla FROM Tabelle;

HolgerCW 15. Jan 2008 13:29

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Ich habe einen Gedankenfehler gemacht ...

Habe mir neben die berechneten Werte mal die Zielennummern schreiben lassen:

Zeilennummer Berechnete
3 1
1 1
2 2

Das Ergebnis ist richtig, nur will ich ja eigentlich egal welche Sortierung vorliegt, die oberste Zeile als 1, die nächste 2 und dann wieder 1 und danach 2 u.s.w. haben ...

Ist das irgendwie hin zu kriegen ?

Gruss

Holger

mkinzler 15. Jan 2008 13:31

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Dann müsstest du eine SP schreiben.

HolgerCW 15. Jan 2008 13:41

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Was ist SP ?

mkinzler 15. Jan 2008 13:44

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Stored Procedure

HolgerCW 15. Jan 2008 13:45

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Vielleicht mal einen Ansatz was dadrin stehen müsste ...

mkinzler 15. Jan 2008 13:52

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Einfach dort in einer Schleife die Datensatze zurückgeben und lokale Variable umswitchen

HolgerCW 15. Jan 2008 14:37

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Habe irgendwie ein Brett vor dem Kopf, vielleicht mal ein Beispiel ?

geht es wirklich nicht in SQL vom Programm aus ?

Gruss

Holger

mkinzler 15. Jan 2008 15:15

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
http://st-curriculum.oracle.com/tuto...rial/index.htm
Zitat:

geht es wirklich nicht in SQL vom Programm aus ?
in SQL nicht. Lokal aber schon

HolgerCW 15. Jan 2008 16:18

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Zitat:

Lokal aber schon
Wie würde es lokal denn gehen ?

mkinzler 15. Jan 2008 16:22

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Einfach Datenmenge durchgehen und Spalte setzen. Für was brauchst du diesen alternierenden Wert?

HolgerCW 15. Jan 2008 16:24

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Will den an den RaveReport übergeben. Bei 1 = grau Zeile, bei 2 = weisse Zeile

Gruss

Holger

DeddyH 15. Jan 2008 16:41

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Ich mache nichts mit Rave, aber gibt es da nichts ähnliches wie RecNo?

marabu 15. Jan 2008 16:56

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Hallo,

wenn mit der TRvDataSetConnection gearbeitet wird, dann kann beim Ereignis OnGetRow() auf DataSet.RecNo zugegriffen werden.

Freundliche Grüße

DeddyH 15. Jan 2008 17:01

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Dann könnte man doch theoretisch mit einem Bool' schen Array of TColor und Odd(RecNo) arbeiten, oder täusche ich mich?

raiguen 15. Jan 2008 20:05

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Zitat:

Zitat von marabu
...wenn mit der TRvDataSetConnection gearbeitet wird, dann kann beim Ereignis OnGetRow() auf DataSet.RecNo zugegriffen werden...

Zitat:

Zitat von DeddyH
Dann könnte man doch theoretisch mit einem Bool' schen Array of TColor und Odd(RecNo) arbeiten, oder täusche ich mich?

Jo, und das kannst du doch im BeforePrint-Ereignis der jeweiligen Reportzeile nutzen:
Delphi-Quellcode:
  if Odd(DataSet.RecNo) then Zeilenfarbe=grau
  else Zeilenfarbe=weiss
nur mal so als Gedanke auf den Programmierertisch geworfen...
Aif der anderen Seite: wenn alles das nicht hilft, warum dann nicht 'einfach' eine Variable (oder meintwegen auch ne Property) 'ZeilenNr' verwenden, die beim BeforePrint abgefragt wird und beim AfterPrint entsprechend incrementiert wird? ...oder über eine Boolsche Variable (oder Property) IstGrau...
Delphi-Quellcode:
procedure BeforePrint()
begin
//--Integer variante:
  if Odd(ZeilenNr) then Zeie=grau
  else Zeile=weiss;
 
//--boolesche Variante
  if Istgrau then Zeilenfarbe=grau
  else Zeilenfarbe = weiss
...
end;

procedure AfterPrint()
begin
//--Integer Variante:
  ZeilenNr := ZeilenNr +1;

//--boolesche Variante:
  //--Farbzustand umkehren
  IstGrau := not Istgrau;
...
end;
Ich denke, das ist doch allemal einfacher und schneller zu handeln, als umständlich irgendeine SQL-Proc zu kritzeln!? :gruebel:

DeddyH 16. Jan 2008 07:29

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
Ich würde das etwas kürzen:
Delphi-Quellcode:
procedure BeforePrint()
const Farbe: array[Boolean] of TColor = (clGray,clWhite);
begin
  Zeile.Color := Farbe[Odd(RecNo)];
end;

raiguen 16. Jan 2008 09:05

Re: SQL -> Ein Unterabfrage soll immer 1 und 2 liefern
 
@DeddyH: :thumb: klar, optimieren geht immer (und ist in diesem Falle auch eleganter ;) )


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 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