Abfrage mit Pivot

Springstil

Benutzer
Beiträge
17
Hallo zusammen,

ich möchte gern ne View basteln die ich mit einem Programm abfrage und mir in Excel rein schmeiße. Das ist soweit auch kein Thema nur hab ich bei einer Abfrage eine Spezielle anforderung...

Meine View sieht so aus:
Code:
SELECT top 10000
dbo.Augsburg_Artikel_Pass.[Kund.-Nr],
dbo.ABDT_Pos.ArtNr,
dbo.ABDT_Pos.Masseinheit,
dbo.ABDT_Pos.ArtText1 + ','+ dbo.ABDT_Pos.ArtText2 as Beschreibung,
dbo.ABDT_Pos.Umkarton,
dbo.ABDT_Pos.Menge,
dbo.ABDT_Pos.VKPreis

FROM
dbo.Augsburg_Artikel_Pass
LEFT JOIN dbo.ABDT_Pos ON dbo.Augsburg_Artikel_Pass.[Auftr-Nr] = dbo.ABDT_Pos.AuftragsNr
GROUP BY
dbo.ABDT_Pos.ArtNr,
dbo.Augsburg_Artikel_Pass.[Kund.-Nr],
dbo.ABDT_Pos.Masseinheit,
dbo.ABDT_Pos.ArtText1 + ','+ dbo.ABDT_Pos.ArtText2,
dbo.ABDT_Pos.Umkarton,
dbo.ABDT_Pos.Menge,
dbo.ABDT_Pos.VKPreis
order by
dbo.ABDT_Pos.ArtNr

Klappt auch wunderbar. Nur habe ich nacharbeiten. Denn ich muss für 7 Kundennummern die Mengen einzeln ausgeben. Ich würde also gern die Kundennummern als Zeilen Name stehen haben und dort die richtigen mengen eintragen von der Artikelnr die natürlich mit Auftragsnr gegenüber gestellt werden muss.

Also quasi: Auftragsnummer 1234 hat für Kundennummer 567 eine menge von 999 bestellt. Ganz Links in der Tabelle steht dann Art.nr mit den oben aufgeführten Daten und am ende steht die KundenNr mit den passenden mengen zu den Artikeln die Links stehen.

Hoffe ich hab es einigermaßen erklären können.
dbo.Augsburg_Artikel_Pass.[Kund.-Nr] und dbo.ABDT_Pos.Menge, würden Natürlich aus dem Select raus fliegen wenn ich das so hin bekommen würde.
 
Werbung:
Ganz klar ist mir das noch nicht, die 7 Kundennummern sind die fix oder variieren die?

Ich würde etwas versuchen wie
Code:
SELECT TOP 10000
(CASE WHEN dbo.Augsburg_Artikel_Pass.[Kund.-Nr] IN ( 1,2,3,4,5,6,567 ) THEN cast(cast(dbo.Augsburg_Artikel_Pass.[Kund.-Nr] AS VARCHAR(20)) + cast(dbo.ABDT_Pos.ArtNr AS VARCHAR(20)) AS INT) ELSE dbo.Augsburg_Artikel_Pass.[Kund.-Nr] END) AS [Kunden.-Nr],
[...]
GROUP BY (CASE WHEN dbo.Augsburg_Artikel_Pass.[Kund.-Nr] IN ( 1,2,3,4,5,6,567 ) THEN cast(cast(dbo.Augsburg_Artikel_Pass.[Kund.-Nr] AS VARCHAR(20)) + cast(dbo.ABDT_Pos.ArtNr AS VARCHAR(20)) AS INT) ELSE dbo.Augsburg_Artikel_Pass.[Kund.-Nr] END)
Also im Prinzip die Spalte für diese 7 Kundennummern manipulieren so das sie eindeutig wird und damit Gruppieren.
 
Achso jetzt verstehe ich erst das PIVOT in der Überschrift. Ich bin kein großer Freund von Pivot-Funktionen aber es ginge wenn du erst PIVOT machst und dann in einem äußeren Select gruppierst. Also mal ganz grob:
Code:
SELECT ...
FROM (

SELECT *
FROM tabelle
PIVOT...

) t
GROUP BY ...
Oder du machst für deine speziellen Kunden eigene Joins, also etwa so:
Code:
SELECT t0.ArtNr,sum(t0...) Summe_ohne_VIP,sum(t1...) AS Summe_VIP_567
FROM dbo.Augsburg_Artikel_Pass t0
CROSS JOIN dbo.Augsburg_Artikel_Pass t1
ON t0.ArtNr = t1.ArtNr
AND t1.[Kund.-Nr] = 567
WHERE t0.[Kund.-Nr] NOT IN ( 1,2,3,4,5,6,567 )
GROUP BY t0.ArtNr
 
) t
GROUP BY ...[/CODE]
Oder du machst für deine speziellen Kunden eigene Joins, also etwa so:
Code:
SELECT t0.ArtNr,sum(t0...) Summe_ohne_VIP,sum(t1...) AS Summe_VIP_567
FROM dbo.Augsburg_Artikel_Pass t0
CROSS JOIN dbo.Augsburg_Artikel_Pass t1
ON t0.ArtNr = t1.ArtNr
AND t1.[Kund.-Nr] = 567
WHERE t0.[Kund.-Nr] NOT IN ( 1,2,3,4,5,6,567 )
GROUP BY t0.ArtNr

Kannst du mir das mal genauer erläutern ? hab das in dieser art und weise noch nicht gemacht.
sum ist eigendlich uninteressant. Die menge hab ich ja fest stehen. Ich muss diese nur an der ArtikelNr und Auftragsnummer gebunden ausgeben müssen.
 
Naja in der eigentlichen Abfrage suchst du die gewünschten Daten, ausgenommen der "VIP"-Kunden. Dann joinst du die selbe Tabelle dazu und zwar nur die Daten jeweils eines Kunden. Die Spalten dieser Tabelle benennst du nach dem Kunden. Der Join ist ein CROSS JOIN damit alle Datensätze die eventuell nur bei diesem Kunden vorkommen auch gelistet werden.
 
Werbung:
Zurück
Oben