![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: FIBplus
mehrere Spalten in Ergebnismenge
Hi,
ich brauche für eine Statistik mehrere Datensätze, die allerdings aus mehreren zusammengefügt werden müssen. Beispiel : zu jedem Artikel existiert pro Monat ein Datensatz. Jetzt sollen die Datensätze 1 bis 12 in einer Zeile dargestellt werden können. Also ungefähr so :
Code:
Die Tabellen sind momentan so aufgebaut, dass jeweils nur die Monate existieren, die <> 0 sind, denn es kann vorkommen, dass nur 1 Monat relevant ist. Statt einzelne Monate könnte man ja auch 12 Monate pro Artikel mitschleppen, aber geht das auch anders ?
Artikel 1 Mon1 Mon2 .. Mon12
Artikel 2 Mon1 Mon2 .. Mon12 |
AW: mehrere Spalten in Ergebnismenge
Nennt man Pivot
|
AW: mehrere Spalten in Ergebnismenge
Oder auch Kreuztabelle.
|
AW: mehrere Spalten in Ergebnismenge
Wenn du das Ergebnis als DataSet haben möchtest, dass du einfach an ein DBGrid bindest, dann musst du eine Pivot Abfrage erstellen (und hast pro Artikel auch 12 Monatswerte).
Du kannst aber auch ein StringGrid nehmen und dieses mit den Werten aus der normalen Abfrage füllen. Kommt jetzt darauf an, was schneller und einfacher umzusetzen ist. |
AW: mehrere Spalten in Ergebnismenge
Liste der Anhänge anzeigen (Anzahl: 1)
Nach etwas weitersuchen und zusammenstückeln kriege ich jetzt mit dem hier :
Code:
das im Anhang. Wichtig ist schon mal, dass die Detail-Datensätze nicht untereinander sondern nebeneinhander angezeigt werden. Nur die Zeilen stimmen noch nicht. 3. Spalte steht auch in 3. Zeile usw. Was fehlt da noch ? Geht das nur mit CASE oder ist das Zufall ?
SELECT (CASE MONAT WHEN 1 THEN UMSATZ ELSE 0 END) AS MON1,
(CASE MONAT WHEN 2 THEN UMSATZ ELSE 0 END) AS MON2, (CASE MONAT WHEN 3 THEN UMSATZ ELSE 0 END) AS MON3, (CASE MONAT WHEN 4 THEN UMSATZ ELSE 0 END) AS MON4, (CASE MONAT WHEN 5 THEN UMSATZ ELSE 0 END) AS MON5, (CASE MONAT WHEN 6 THEN UMSATZ ELSE 0 END) AS MON6, (CASE MONAT WHEN 7 THEN UMSATZ ELSE 0 END) AS MON7, (CASE MONAT WHEN 8 THEN UMSATZ ELSE 0 END) AS MON8, (CASE MONAT WHEN 9 THEN UMSATZ ELSE 0 END) AS MON9, (CASE MONAT WHEN 10 THEN UMSATZ ELSE 0 END) AS MON10, (CASE MONAT WHEN 11 THEN UMSATZ ELSE 0 END) AS MON11, (CASE MONAT WHEN 12 THEN UMSATZ ELSE 0 END) AS MON12 FROM STAT WHERE ID_ART=2874423 |
AW: mehrere Spalten in Ergebnismenge
Sollte mit einem ähnlichen View lösbar sein
SQL-Code:
CREATE OR ALTER VIEW UMSATZPROMONAT(
ARTIKEL, JAHR, JANUAR, FEBRUAR, MAERZ, APRIL, MAI, JUNI, JULI, AUGUST, SEPTEMBER, OKTOBER, NOVEMBER, DEZEMBER) AS select Artikel as Artikel, Jahr as jahr, sum( Januar) as Januar, sum( Februar) as Februar, sum( Maerz) as Maerz, sum( April) as April, sum( Mai) as mai, sum( Juni) as juni, sum( Juli) as juli, sum( August) as august, sum( September) as september, sum( Oktober) as oktober, sum( November) as november, sum( Dezember) as dezember from ( select Artikel as Artikel, Jahr as Jahr, iif( monat = 1, umsatz, 0) as Januar, iif( monat = 2, umsatz, 0) as Februar, iif( monat = 3, umsatz, 0) as Maerz, iif( monat = 4, umsatz, 0) as April, iif( monat = 5, umsatz, 0) as Mai, iif( monat = 6, umsatz, 0) as Juni, iif( monat = 7, umsatz, 0) as Juli, iif( monat = 8, umsatz, 0) as August, iif( monat = 9, umsatz, 0) as September, iif( monat = 10, umsatz, 0) as Oktober, iif( monat = 11, umsatz, 0) as November, iif( monat = 12, umsatz, 0) as Dezember from ( select Artikel as Artikel, extract( year from datum) as jahr, extract( month from datum) as monat, sum( umsatz) as umsatz from umsatz group by 1,2,3 ) ) group by Artikel, Jahr ; |
AW: mehrere Spalten in Ergebnismenge
Zitat:
|
AW: mehrere Spalten in Ergebnismenge
Zitat:
P.S.: mit dem View siehts schon richtig aus. Aber warum ein View ? |
AW: mehrere Spalten in Ergebnismenge
Weil das hübscher ist. Oder auch:
Weil das eine klare Schnittstelle zwischen Darstellung (EXE) und Erzeugung (DB) schafft. Du musst die EXE nicht aufbohren, wenn Du die View änderst (z.B. Daten aus einer anderen Tabelle etc.) und Du kannst die Auswertung auch an anderer Stelle noch gebrauchen (DRY) btw. geht nicht auch
Code:
select sum(iif(monat = 1, umsatz, 9 )) as Januar,
... |
AW: mehrere Spalten in Ergebnismenge
Was nützt es mich, die EXE nicht ändern zu müssen, dafür aber die View bzw. die DB ? :shock: Oder andersrum gefragt : wie kann ich die View parametrisieren ? Geht IMHO nicht. Ich kann ja wohl schlecht am 1.1.2013 eine neue View anlegen, weil es dann auch Daten für 2013 gibt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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