Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi select mehrte Spalten (https://www.delphipraxis.net/130910-select-mehrte-spalten.html)

jangbu 15. Mär 2009 16:26

Datenbank: SQL-Server 2000 • Zugriff über: BDE

select mehrte Spalten
 
Hallo,

habe folgendes Problem (hab die DB nicht erzeugt), habe eine Tabelle(Lieferung) die u.a. aus 3 Artikelspalten (Art_1,Art_2,Art_3) besteht. Eine Lieferung kann somit aus bis zu 3 Artikeln bestehen. Wie man sieht ist DB nicht normiert. Ich muss jetzt alle Artikel suchen. Über:

select art_1, count(art_1) from Lieferung
where art_1 > 0 group by art_1 order by art_1

bekomme ich alle verwendeten Art_1 mit Anzahl heraus. Da jedoch die gleichen artikel auch noch in Art_2 bzw. Art_3 stehen könnten und ich die drei Spalten nicht in einer (für die Auswertung) zusammenführen kann (weiß zumindest nicht wie) würde ich jetzt drei selects nacheineander auf die Spalten art_1, art_2 und art_3 laufen lassen und das Ergebis jeweils eine eigene Spalte einer Hilfstabelle einfügen, in dieser Tabelle würde ich dann anschließend meine eigentliche Auswertung (min,max,aver...) durchführen.
Oder hat jemand eine elegantere Idee.

jangbu

omata 15. Mär 2009 16:31

Re: select mehrte Spalten
 
Vielleicht so...
SQL-Code:
SELECT art, SUM(anzahl) AS anzahl
FROM (SELECT art_1 AS art, 1 AS anzahl
      FROM lieferung
      WHERE art_1 > 0
      UNION
      SELECT art_2 AS art, 1 AS anzahl
      FROM lieferung
      WHERE art_2 > 0
      UNION
      SELECT art_3 AS art, 1 AS anzahl
      FROM lieferung
      WHERE art_3 > 0) x
GROUP BY art
ORDER BY art
Was du da allerdings wie mit MIN, MAX und AVG machen willst ist mir noch nicht ganz klar.

WoGe 15. Mär 2009 17:54

Re: select mehrte Spalten
 
Hallo

wenn man Omata's SQL Code ein wenig umbastelt, sollte es gehen:
SQL-Code:
create view View_Artikel_Anzahl(Artikel,anzahl)
as
(SELECT art_1 AS art, 1 AS anzahl
      FROM lieferung
      WHERE art_1 > 0
      UNION
      SELECT art_2 AS art, 1 AS anzahl
      FROM lieferung
      WHERE art_2 > 0
      UNION
      SELECT art_3 AS art, 1 AS anzahl
      FROM lieferung
      WHERE art_3 > 0) x
SQL-Code:
Select count(*) from View_Artikel_Anzahl
group by Artikel
order by Artikel
Gruss
wo

omata 15. Mär 2009 18:19

Re: select mehrte Spalten
 
Ja, aber ohne Klammern...
SQL-Code:
CREATE VIEW view_artikel_anzahl
AS
SELECT art_1 AS art, 1 AS anzahl
FROM lieferung
WHERE art_1 > 0
UNION
SELECT art_2 AS art, 1 AS anzahl
FROM lieferung
WHERE art_2 > 0
UNION
SELECT art_3 AS art, 1 AS anzahl
FROM lieferung
WHERE art_3 > 0

jangbu 15. Mär 2009 19:03

Re: select mehrte Spalten
 
Danke omata, super passt alles,

Zu Deiner Frage: was ich mit min,max,.. will:

In der Tabelle gibt es zu jedem Artikel auch noch einen Preis und den will ich eigentlich mit den Aggregatfunktionen auswerten:

(select art_1,art_2,art_3,preis_1,preis_2,preis_3)

Hab die Abfrage entsprechend angepasst. Jetzt kann ich die Aggregatfunktion avg(preis) über die virtuelle spalte preis (preis_1,_2,_3) laufen lassen.

Nochmals danke, auf "UNION" und Unterabfrage wäre ich jetzt nicht gekommen.

jangbu


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