Schlüsselwerte als Spalte

Henig

Mitglied
Guten Tag *All,

ich habe ein kleines Problem bei einer Auswertung die ich für einen Kollegen machen soll.

Ausgangssituation:
Ich habe eine Tabelle Artikelabverkäufe und eine Kunden.

In den Artikelabverkäufen stehen:
Kundennummer, Jahr, Warengruppen, 12 Spalten für Mengen und 12 für Verkaufswert (für jeden Monat einzeln).

Code:
SELECT 
KDNR, WGRNR, SUM('Monatsmengen * Monatsverkaufswerte')
FROM Abverkäufe 
WHERE
(WGRNR=200 or WGRNR=500 or WGRNR=510 or WGRNR= 520) and JAHR = 2013       
GROUP BY KDNR
ORDER BY KDNR, WGRNR

Jetzt bekomme ich zwar die richtigen Ergebnisse, aber leider ist das von der Formatierung nicht so schön, da ich drei bis vier mal untereinander die selbe Kundennummer stehen habe, bei denen dann unterschiedliche Warengruppen stehen.
Besser Wäre es, wenn ich jetzt die vier Warengruppen die ich habe als Spalte "Warengruppe 200" , "Warengruppe 500", etc. mit den aufsummierten Werten als Extraspalte hinten dran setzen könnte. Gibt es eine Möglichkeit zu sagen, dass eine unterschiedliche Spalten mit unterschiedlichen Werten gefüllt werden sollen, die von unterschiedlichen Schlüsselattributen abhängig sind?

Vielen Dank,

Henig
 
Zuletzt bearbeitet:
Hi

Ich habe noch nicht verstanden was genau du haben möchtest. Kannst du mal ein Datenbeispiel machen, was du momentan hast und wie du es angepasst haben möchtest?

Zudem: welches DBMS?
 
Nachtrag: ich glaube zu verstehen dass das was du willst ein Pivot ist. Unter der Annahme, dass du MySQL hast:

SQL:
SELECT  
  KDNR,
  SUM(
    CASE 
      WHEN WGRNR=200
      THEN Monatsmengen * Monatsverkaufswerte 
      ELSE NULL 
    END
  ) AS Warengruppe_200,
  SUM(
    CASE 
      WHEN WGRNR=500
      THEN Monatsmengen * Monatsverkaufswerte 
      ELSE NULL 
    END
  ) AS Warengruppe_500,
  SUM(
    CASE 
      WHEN WGRNR=510
      THEN Monatsmengen * Monatsverkaufswerte 
      ELSE NULL 
    END
  ) AS Warengruppe_510,
  SUM(
    CASE 
      WHEN WGRNR=520
      THEN Monatsmengen * Monatsverkaufswerte 
      ELSE NULL 
    END
  ) AS Warengruppe_520
FROM 
  Abverkäufe 
WHERE
  JAHR = 2013       
GROUP BY 
  KDNR
ORDER BY 
  KDNR;

Falls Oracle, dort gibt es von Haus aus die Funktion PIVOT.

PS: Brauche bei Datenbanken nie Umlaute und Leerschläge. Früher oder später bereiten dir diese nur Probleme.
 
Zuletzt bearbeitet von einem Moderator:
Zurück