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

Aufteilen von Spalten

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Springstil, 12 Juni 2019.

  1. Springstil

    Springstil Benutzer

    Hallo zusammen,

    ist es in SQL möglich spalten aufzuteilen nach einem bestimmten Kriterium ?

    Ich habe eine ArtikelNr, zu der gibt es 3 verschiedene Bestellungen. Das bedeutet natürlich 3 mal eine Menge und Bestellnummer.

    Ich würde es gern so haben, das der artikel nicht 3 mal vorkommt sondern diese 3 mal in einer ganzen spalte dagestellt werden. Also z.b BestellNr(1) - XXX Menge(1) XXX - Bestellnr(2) XXX - Menge(2) XXX usw.

    Also quasi das er wie bei Group by zusammen fast, aber nichts zusammen rechnet oder so sondern alles in eine Spalte packt. Ist das möglich?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    mit PostgreSQL:

    Code:
    test=*# select * from springstil ;
     bestellnummer | menge
    ---------------+-------
     artikel       |    10
     artikel       |    20
     artikel       |    30
    (3 rows)
    
    test=*# with temp as (select *, row_number() over (partition by bestellnummer) from springstil) select string_agg(bestellnummer || '(' || row_number::text || ') - Menge: ' || menge::text || ', ','') as bestellungen from temp group by bestellnummer;
                                   bestellungen                               
    --------------------------------------------------------------------------
     artikel(1) - Menge: 10, artikel(2) - Menge: 20, artikel(3) - Menge: 30,
    (1 row)
    
    test=*#
    

    ist es das, was Du suchst? Sollte mit geringen Anpassungen auch in MSSQL gehen.
     
    Walter gefällt das.
  3. ukulele

    ukulele Datenbank-Guru

    Wenn ich das richtig verstehe hat er 2 Spalten und möchte daraus 6 machen aber die Spalten als Spalten erhalten und nicht den Inhalt verketten. Da hier von "Bestellungen" die Rede ist kann es natürlich auch mehr als 3 geben, was die Sache ziemlich problematisch und vermutlich sinnfrei macht.

    Wann möchtest du Bestellungen nebeneinander darstellen? Bis zu wieviele Einträge und warum eigentlich? 3 Bestellungen mit der selben Nummer untereinander scheinen mir erstmal viel sinnvoller.
     
  4. Springstil

    Springstil Benutzer

    Das Hauptproblem warum ich dazu greifen möchte ist folgender:

    Wir haben eine Excel Tabelle mit Makros die auf die Datenbank zugreift. In dieser gebe ich eine liste von Artikelnummern an. Nun kann ich noch wählen welche Infos ich dazu haben möchte. Wie menge lager bestand usw usw. das würde ich gerne ausbauen das er mir auch die Bestellnummern, Termine usw anzeigt. diese hab ich schon in einer View bereitgestellt.

    Das Problem ist aber das es oft vorkommt das ein Artikel 3 mal bestellt wurde in verschiedenen mengen. Weil zb etwas mehr von kunden bestellt wurde als das wir es beim Lieferanten bestellt haben. In der Datenbank steht dann die Artikelnummer mehrmals drin mit unterschiedlichen Infos. Unsere Excel Datei zeigt aber immer nur den Artikel 1 mal an.

    Das führt dann dazu das meine Kollegen der ich die arbeit erleichtern möchte nicht sieht was sonst noch für mengen kommen. Da der Artikel ja nicht nur beispielsweise am 13.6 kommt sondern auch noch mal am 20.6 mit anderer menge usw. Es würden dann z.b pro Artikel 5 spalten dazukommen.

    Ich hab leider von VBA noch weniger Ahnung das ich es evl umschreiben könnte, und hab gehofft das ganze so lösen zu können.
     
  5. ukulele

    ukulele Datenbank-Guru

    Dann ist akretschmers Vorschlag definitiv die bessere Wahl als eigene Spalten. Denn du müsstest ja auch ein Makro so bauen das die Anzahl der Spalten variiert, das ist ziemlich abartig auch in SQL (PIVOT wäre hier z.B. möglich).

    Hier mal eine MSSQL Variante:
    Code:
    SELECT   artikelnr,
           stuff((   SELECT   '; am ' + convert(VARCHAR(20),t.datum,104) + ' ' +
                           convert(VARCHAR(20),t.menge) + ' Stück'
                   FROM   tabelle t
                   WHERE   t.artikelnr = tabelle.artikelnr
                   FOR XML PATH ('')),1,2,'') AS bestellungen
    FROM   tabelle
    GROUP BY artikelnr
    Wenn du die Artikelnummern und die Bestellungen zuvor sowieso schon per View joinst kannst du dir das theoretisch sparen und die Bestellungen im Subselect direkt abfragen.
     
    Walter gefällt das.
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