Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage (Kreuztabelle) (https://www.delphipraxis.net/112633-sql-abfrage-kreuztabelle.html)

waldforest 24. Apr 2008 18:35

Datenbank: Firebird • Version: 2.1 • Zugriff über: ZEOS

SQL Abfrage (Kreuztabelle)
 
Hallo,
ich habe ein Problem bei dem ich nicht so wirklich weiter komme.

Ich habe eine Tabelle, die ich über Gruppierungen auswerten möchte.
Als da Wären
1. Gruppe : Kundenname
2. Gruppe : Artikel

Nun soll zu jedem Kundenname und Produkt die Anzahl, sowie der maximale Umsatz ermittelt werden.

Habe hier im Forum schon danach gesucht, etwas gefunden, was ich aber nicht so wirklich verstehe, bzw. nicht funktioniert

http://www.delphipraxis.net/internal...l+kreuztabelle

Die Tabelle soll final so aussehen

Kundenname Artikel1 Artikel2 Artikel33 ......
Name1 anzahl anzahl anzahl
Name2 anzahl anzahl anzahl

Mit dem dargestellten Beispile erhalte ich leider einen SQL Fehler, SQL Error - 104, token unknownline 2, column 33 else.

Select name,
SUM(CASE ART WHEN 'art1' Then MAX else 0 end) As 'art1',
SUM(CASE ART WHEN 'art2' Then MAX else 0 end ) As 'art2',
SUM(CASE ART WHEN 'art3' Then MAX else 0 end) As 'art3',
from vio Group by name

Final, möchte ich mir einen GRID aufzubauen bei der jede Zeile wie folgt aufgebaut sein soll
Zu jedem Kundennamen möchte ich zu 7 Produkten den Maximalumsatz, sowie die Anzahl auflisten

Name, Artikel1 + Maximalumsatz.Artikel1, Anzahl.Artikel1, Artikel2 + Maximalumsatz.Artikel2, Anzahl.Artikel2, .... Artikel7 + Maximalumsatz.Artikel7, Anzahl.Artikel7,

Hat hier jemand einen Tipp ??

mfg

DeddyH 24. Apr 2008 18:37

Re: SQL Abfrage (Kreuztabelle)
 
Hinter dem jeweiligen MAX fehlt irgendwie das Feld, oder nicht?

mkinzler 24. Apr 2008 18:39

Re: SQL Abfrage (Kreuztabelle)
 
MAX ist ein reservierter Ausdruck.

waldforest 24. Apr 2008 19:17

Re: SQL Abfrage (Kreuztabelle)
 
:wall: oh mann bin ich blind. Allerdings bekomme ich jetz den Fehler, dass
art1 unknown ist.

P.S.: ich glaub heute sollte ich nichts mehr versuchen, bin irgendwie betriebsblind.

mfg

mkinzler 24. Apr 2008 19:19

Re: SQL Abfrage (Kreuztabelle)
 
Wie sieht den die Quelltabelle aus?

waldforest 24. Apr 2008 19:28

Re: SQL Abfrage (Kreuztabelle)
 
die Quelltabelle enthält

name, art, Umsatz

Hier meiner letzter Versuch, der mir art1 als unknown auswirft. Aber eigentlich wird diese doch erst neu definiert oder sehe ich dies falsch?

Select name,
SUM(CASE ART WHEN 'art1' Then Umsatz else 0 end) As 'art1',
SUM(CASE ART WHEN 'art2' Then Umsatz else 0 end ) As 'art2',
SUM(CASE ART WHEN 'art3' Then Umsatz else 0 end) As 'art3',
from Kunde Group by name

mkinzler 24. Apr 2008 19:32

Re: SQL Abfrage (Kreuztabelle)
 
SQL-Code:
 ... SUM(CASE WHEN ART = 'art1' Then Umsatz else 0 end) As 'art1', ...
oder
SQL-Code:
SUM (IIF( ART = 'art1', Umsatz, 0)) ...

DeddyH 24. Apr 2008 19:33

Re: SQL Abfrage (Kreuztabelle)
 
SQL-Code:
SELECT name,
      SUM(CASE art WHEN 'art1' THEN Betrag ELSE 0 END) AS art1,
      SUM(CASE art WHEN 'art2' THEN Betrag ELSE 0 END) AS art2,
      SUM(CASE art WHEN 'art3' THEN Betrag ELSE 0 END) AS art3,
FROM Kunde GROUP BY name
Die art muss allerdings in Kleinschreibung eingetragen sein.

waldforest 24. Apr 2008 19:35

Re: SQL Abfrage (Kreuztabelle)
 
Danke
habs gerade auch gemerkt. Man darf halt nicht alles aus den Beispielen blind übernehmen.

waldforest 29. Apr 2008 13:37

Re: SQL Abfrage (Kreuztabelle)
 
Hallo,
nun funtioniert es zumindest halb.

Die Kreuztabelle muss ich nun noch etwas optimieren.

Die Datenbasis ist
Kundenname, Artikelname (4 verschiedene Artikelgruppen), Wert (dieser wird je Datensatz unterschiedlich sein)
z.B.
Mustermann, Artikel1, 12€
Mustermann, Artikel1, 17€
Mustermann, Artikel2, 5€
:
:

Gruppiert wird das Ganze auf Kundenname

Das Ergebnis soll wie folgt aufgebaut sein.
Zu jedem Kundennamen benötige ich die Anzahl der und den Maximalwert zu jedem der 5 artikel.

Kundenname Artikel1_Anzahl, Artikel1_Maxwert, Artikel2_Anzahl, Artikel2_Maxwert.

Ich habs wie folgt probiert, allerdings stimmen die Ergebniswerte nicht.

SELECT name, count(name),
COUNT( IIF( artikel = 'a', name, '')) As artikel1_anz,
MAX( IIF( artikel = 'a', umre4, 0)) As artikel1_max,
COUNT( artikel = 'b') As artikel2_anz,
MAX( IIF( artikel = 'b', umre4, 0)) As artikel2_max,
COUNT( artikel = 'c', '')) As artikel3_anz,
MAX( IIF( artikel = 'c', umre4, 0)) As artikel3_max,
COUNT( IIF( artikel = 'd', name, '')) As artikel4_anz,
MAX( IIF( artikel = 'd', umre4, 0)) As artikel4_max
from Stammdaten Group by name

Die Maximalwerte werden zu jedem Artikel richtig ausgegeben, allerdings die Anzahl ist bei allen gleich, ich bekomme es irgendwie nicht hin bei einem Kunden die Häufigkeit der Artikel zählen, alle sind gleich.

hat vielleicht jemand eine Idee ??
Da ich SQL-Anfänger bin stellt sich vielleicht erst einmal die Frage ob dies überhaupt mit einer Get es überhaupt mit einer Abfrage geht, oder muss ich dies über 2 Tabellen realisieren, die ich anchließend miteinander verknüpfe

mfg


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