AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Gruppieren über Union
Thema durchsuchen
Ansicht
Themen-Optionen

Gruppieren über Union

Ein Thema von barnti · begonnen am 19. Mai 2004 · letzter Beitrag vom 19. Mai 2004
Antwort Antwort
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Gruppieren über Union

  Alt 19. Mai 2004, 10:24
Hallo,

ich habe zwei Select-Statements (mysql), die ich mit 'Union' zusammenfasse. Jedes einzelne Statement ist nach der selben Spalte gruppiert.
SQL-Code:
Select *
From 'Table1'
Join ...
Where ...
Group by 'ID'

union

Select *
From 'Table2'
Join ...
Where ...
Group by 'ID'
Wie schaffe ich es aber die Gruppierung für die ganze Abfrage festzulegen? Denn ich bekomme einen Datensatz doppelt! Beispiel:

SQL-Code:
ID Menge Differenz
--------------------
51 1 1
52 1 1
53 1 1
54 2 2
55 3 3
56 10 10 // Bis hier ist das erste Select-Statement
56 -2 -2 // Diese Zeile liefert mir das zweite
Eigentlich möchte ich den Datensatz mit der ID 56 nur einmal. Für die Differenz muss ich dann das Ergebnis 8 bekommen...

Weiß jemand Rat?

Danke!
Gruß,

Barnti
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Gruppieren über Union

  Alt 19. Mai 2004, 10:49
Den Sinn der Gruppierung kapiere ich nicht (bzw. der ganzen Abfrage )....

Code:
[b]SELECT[/b] ID
      ,Menge
      ,Differenz
[b]FROM[/b]  ([b]SELECT[/b] ID
              ,Menge
              ,Menge [b]As[/b] Differenz
        [b]FROM[/b]  Table1
       [b]UNION ALL[/b]
        [b]SELECT[/b] t2.ID
              ,t2.Menge
              ,abs(t1.Menge - t2.Menge) [b]As[/b] Differenz
        [b]FROM[/b]  Table1 t1
              ,Table2 t2
        [b]WHERE[/b] t1.ID(+) = t2.ID [color=#000088]-- kA ob mySQL das schluckt (ich hasse die JOIN Schreibweise :roll: )[/color]
                                 [color=#000088]-- -> wäre wohl ein LEFT OUTER[/color]
       )
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Gruppieren über Union

  Alt 19. Mai 2004, 11:03
Hallo,

Zitat von Robert_G:
Den Sinn der Gruppierung kapiere ich nicht (bzw. der ganzen Abfrage )....
Musst Du ja auch nicht unbedingt...

Was ich möchte ist die beiden Gruppierungen zu einer zusammenzufassen:
SQL-Code:
SELECT PK.*, sum(PK.differenz)
FROM Partie P
INNER JOIN ...
INNER JOIN ...
INNER JOIN ...
where Differenz>0
Group By PK.Unterpartie_ID

union

SELECT PK.*, sum(differenz)
FROM Position Pos
INNER JOIN ...
INNER JOIN ...
WHERE A.Auftrag_ID<>6
Group By PK.Unterpartie_ID
Als Ausgabe dann:

SQL-Code:
ID Menge sum(PK.Differenz)
--------------------
51 1 1
52 1 1
53 1 1
54 2 2
55 1 1
56 10 10 // Diese Zeilen sollen Zusammengefasst werden, so dass dort steht:
56 -2 -2 // 56 (beliebig) 8
Mit dem 'Union All' bekomme ich alle Datensätze der Selects. Das bringt daher keine Veränderung...
Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Gruppieren über Union

  Alt 19. Mai 2004, 11:27
Hallo Barnti,

du kannst über Union nicht gruppieren. Da bleibt nur 2 Abfragen zu erstellen und diese dann manuell zusammenzufügen.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Gruppieren über Union

  Alt 19. Mai 2004, 11:56
Zitat von MrSpock:
Hallo Barnti,

du kannst über Union nicht gruppieren. Da bleibt nur 2 Abfragen zu erstellen und diese dann manuell zusammenzufügen.
Das ist Sch****!

Danke MrSpock!
Gruß,

Barnti
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Gruppieren über Union

  Alt 19. Mai 2004, 12:41
Zitat von barnti:
Was ich möchte ist die beiden Gruppierungen zu einer zusammenzufassen:
SQL-Code:
SELECT PK.*, sum(PK.differenz)
FROM Partie P
INNER JOIN ...
INNER JOIN ...
INNER JOIN ...
where Differenz>0
Group By PK.Unterpartie_ID

union

SELECT PK.*, sum(differenz)
FROM Position Pos
INNER JOIN ...
INNER JOIN ...
WHERE A.Auftrag_ID<>6
Group By PK.Unterpartie_ID
Mit dem 'Union All' bekomme ich alle Datensätze der Selects. Das bringt daher keine Veränderung...
Mit einer Unterabfrage (also ein Select auf die bisherige Datenmenge) müsste das gehen:
SQL-Code:
SELECT gruppierungsfeld, SUM(summenfeld) FROM
(
SELECT [feldliste]
FROM ...
GROUP BY ...

UNION ALL

SELECT [feldliste]
FROM ...
GROUP BY ...
)
GROUP BY gruppierungsfeld
Es ist zu beachten: in der [Feldliste] dürfen nur Felder auftauchen, die bei GROUP BY aufgeführt
werden (In deinem Fall Unterpartie_ID) und ausserdem dürfen Aggregatfunktionen (SUM, MIN, MAX, COUNT)
verwendet werden.
SELECT * FROM Tabelle GROUP BY Feld1 ist falsch !
Andreas
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Gruppieren über Union

  Alt 19. Mai 2004, 12:46
@shmia: mysql!
Gruß,

Barnti
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 Uhr.
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