Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   select count() (https://www.delphipraxis.net/174701-select-count.html)

jangbu 6. Mai 2013 14:45

Datenbank: SQL • Version: 2000 • Zugriff über: ADO

select count()
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

kann mir jemand bei folgender Abfrage helfen:
Bestell-Datensatz besteht u.a. aus den Feldern Artikel_1,Artikel_2,Artikel_3. Ich brauche eine Übersicht wie oft die verschiedenen Artikel bestellt wurden also count(art). Da der gleiche Artikel in jeder der 3 Artikel-Spalten vorkommen kann, verwendet ich eine union-Abfrage, nach der taucht aber jeder Artikel nur einmal auf, d.h. count funktioniert hier nicht?

DeddyH 6. Mai 2013 15:00

AW: select count()
 
Zitat:

Zitat von jangbu (Beitrag 1214339)
Bestell-Datensatz besteht u.a. aus den Feldern Artikel_1,Artikel_2,Artikel_3.

Wenn ich das richtig verstehe, ist deine DB nicht in der 3. NF, das macht das Ganze ein wenig schwierig.

[edit] Vielleicht so (ungetestet)?
SQL-Code:
SELECT
  A.Artikelbezeichnung,
  COUNT(*)
FROM
  Artikel A
  JOIN Bestellungen B ON
    A.ID = B.Artikel_1
    OR
    A.ID = B.Artikel_2
    OR
    A.ID = B.Artikel_3
GROUP BY
  A.Artikelbezeichnung
Das setzt voraus, dass in den Bestellungen die Fremdschlüssel auf die Artikeltabelle hinterlegt sind und jeder Artikel nur einmal je Bestellung vorkommen kann. [/edit]

jangbu 6. Mai 2013 15:34

AW: select count()
 
Deddy,

ja die Daten sind nicht normiert, alle relevanten Informationen befinden sich in einer einzigen Tabelle, jaher benötige ich auch kein join auf eine andere Tabelle.

DeddyH 6. Mai 2013 15:41

AW: select count()
 
Ich habe mir Dein Statement noch einmal angeschaut. Klappt das, wenn Du UNION ALL verwendest? IIRC filtert UNION Doppler heraus, das ist ja nicht das, was Du willst.

p80286 6. Mai 2013 15:43

AW: select count()
 
Zitat:

Zitat von jangbu (Beitrag 1214354)
Deddy,

ja die Daten sind nicht normiert, alle relevanten Informationen befinden sich in einer einzigen Tabelle, jaher benötige ich auch kein join auf eine andere Tabelle.

Hört sich für mich an wie:
"Ja ich hab einen Tankwagen als Anhänger, dann muß ich auch nicht zu einer Tankstelle fahren".
:mrgreen:

Wie wäre es hiermit:
Code:
select art,count(reckey) as cnt from
(
select art_1 art,art_1 reckkey from bestg where datum>='28.03.2013'
union
select art_2 art,art_1 reckkey from bestg where datum>='28.03.2013'
union
select art_3 art,art_1 reckkey from bestg where datum>='28.03.2013'
)
group by art
order by art
um reckey zu belegen wäre eine Datensatz_ID natürlich am besten geeignet.

Gruß
K-H

jangbu 6. Mai 2013 15:46

AW: select count()
 
genau das wars, mit union all bekomme ich die korrekte Anzahl wie oft die einzelnen Artikel verwendet werden, egal in welcher der 3 möglichen Spalten sie auftauchen.

Danke DeddyH


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