AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken mehrere Spalten in Ergebnismenge

mehrere Spalten in Ergebnismenge

Ein Thema von Hansa · begonnen am 4. Dez 2012 · letzter Beitrag vom 6. Jan 2013
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

mehrere Spalten in Ergebnismenge

  Alt 4. Dez 2012, 15:20
Datenbank: Firebird • Version: 2.5 • Zugriff über: FIBplus
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:
Artikel 1 Mon1 Mon2 .. Mon12
Artikel 2 Mon1 Mon2 .. Mon12
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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: mehrere Spalten in Ergebnismenge

  Alt 4. Dez 2012, 15:25
Nennt man Pivot
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: mehrere Spalten in Ergebnismenge

  Alt 4. Dez 2012, 15:29
Oder auch Kreuztabelle.
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
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: mehrere Spalten in Ergebnismenge

  Alt 4. Dez 2012, 15:32
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

AW: mehrere Spalten in Ergebnismenge

  Alt 4. Dez 2012, 16:58
Nach etwas weitersuchen und zusammenstückeln kriege ich jetzt mit dem hier :

Code:
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
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 ?
Miniaturansicht angehängter Grafiken
unbenannt.jpg  
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: mehrere Spalten in Ergebnismenge

  Alt 4. Dez 2012, 17:05
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
;
Markus Kinzler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: mehrere Spalten in Ergebnismenge

  Alt 4. Dez 2012, 17:09
Nach etwas weitersuchen und zusammenstückeln kriege ich jetzt mit dem hier :

3. Spalte steht auch in 3. Zeile usw. Was fehlt da noch ? Geht das nur mit CASE oder ist das Zufall ?
Es wird pro Monat ein Ergebnis geliefert, du musst noch eine Summe prio Jahr bilden
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

AW: mehrere Spalten in Ergebnismenge

  Alt 4. Dez 2012, 17:17
du musst noch eine Summe pro Jahr bilden
Inwiefern Summe ? Ich will ja die Monate einzeln.

P.S.: mit dem View siehts schon richtig aus. Aber warum ein View ?
Gruß
Hansa

Geändert von Hansa ( 4. Dez 2012 um 17:41 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#9

AW: mehrere Spalten in Ergebnismenge

  Alt 4. Dez 2012, 17:50
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,
 ...
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

AW: mehrere Spalten in Ergebnismenge

  Alt 4. Dez 2012, 18:20
Was nützt es mich, die EXE nicht ändern zu müssen, dafür aber die View bzw. die DB ? 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:59 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