1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Abfrage mit Pivot

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Springstil, 29 November 2019.

  1. Springstil

    Springstil Benutzer

    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.
     
  2. ukulele

    ukulele Datenbank-Guru

    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.
     
    Springstil gefällt das.
  3. Springstil

    Springstil Benutzer

    Die Kundennummern sind Fix.

    Ich hätte das halt gern als Pivot damit ich das bei einem Export genau so raus bekomme wie es in die Excel datei rein muss.
     
  4. ukulele

    ukulele Datenbank-Guru

    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
     
  5. Springstil

    Springstil Benutzer

    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.
     
  6. ukulele

    ukulele Datenbank-Guru

    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.
     
  7. Springstil

    Springstil Benutzer

    Das wäre doch dann aber nur für einen kunden wenn ich das richtig verstehe?
     
  8. ukulele

    ukulele Datenbank-Guru

    Du kannst mit mehr CROSS JOINs mehr Kunden anhängen, das ist ansich nichts anderes als ein PIVOT im Ergebnis.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden