![]() |
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 ![]() 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 |
Re: SQL Abfrage (Kreuztabelle)
Hinter dem jeweiligen MAX fehlt irgendwie das Feld, oder nicht?
|
Re: SQL Abfrage (Kreuztabelle)
MAX ist ein reservierter Ausdruck.
|
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 |
Re: SQL Abfrage (Kreuztabelle)
Wie sieht den die Quelltabelle aus?
|
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 |
Re: SQL Abfrage (Kreuztabelle)
SQL-Code:
oder
... SUM(CASE WHEN ART = 'art1' Then Umsatz else 0 end) As 'art1', ...
SQL-Code:
SUM (IIF( ART = 'art1', Umsatz, 0)) ...
|
Re: SQL Abfrage (Kreuztabelle)
SQL-Code:
Die art muss allerdings in Kleinschreibung eingetragen sein.
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 |
Re: SQL Abfrage (Kreuztabelle)
Danke
habs gerade auch gemerkt. Man darf halt nicht alles aus den Beispielen blind übernehmen. |
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 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz