AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Abfrage (Kreuztabelle)
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Abfrage (Kreuztabelle)

Ein Thema von waldforest · begonnen am 24. Apr 2008 · letzter Beitrag vom 29. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#1

SQL Abfrage (Kreuztabelle)

  Alt 24. Apr 2008, 18:35
Datenbank: Firebird • Version: 2.1 • Zugriff über: ZEOS
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL Abfrage (Kreuztabelle)

  Alt 24. Apr 2008, 18:37
Hinter dem jeweiligen MAX fehlt irgendwie das Feld, oder nicht?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: SQL Abfrage (Kreuztabelle)

  Alt 24. Apr 2008, 18:39
MAX ist ein reservierter Ausdruck.
Markus Kinzler
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#4

Re: SQL Abfrage (Kreuztabelle)

  Alt 24. Apr 2008, 19:17
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: SQL Abfrage (Kreuztabelle)

  Alt 24. Apr 2008, 19:19
Wie sieht den die Quelltabelle aus?
Markus Kinzler
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#6

Re: SQL Abfrage (Kreuztabelle)

  Alt 24. Apr 2008, 19:28
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: SQL Abfrage (Kreuztabelle)

  Alt 24. Apr 2008, 19:32
 ... SUM(CASE WHEN ART = 'art1Then Umsatz else 0 end) As 'art1', ... oder
SUM (IIF( ART = 'art1', Umsatz, 0)) ...
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: SQL Abfrage (Kreuztabelle)

  Alt 24. Apr 2008, 19:33
SQL-Code:
SELECT name,
      SUM(CASE art WHEN 'art1THEN Betrag ELSE 0 END) AS art1,
      SUM(CASE art WHEN 'art2THEN Betrag ELSE 0 END) AS art2,
      SUM(CASE art WHEN 'art3THEN Betrag ELSE 0 END) AS art3,
FROM Kunde GROUP BY name
Die art muss allerdings in Kleinschreibung eingetragen sein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#9

Re: SQL Abfrage (Kreuztabelle)

  Alt 24. Apr 2008, 19:35
Danke
habs gerade auch gemerkt. Man darf halt nicht alles aus den Beispielen blind übernehmen.
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#10

Re: SQL Abfrage (Kreuztabelle)

  Alt 29. Apr 2008, 13:37
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:33 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