Aufteilen von Spalten

Springstil

Benutzer
Beiträge
17
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?
 
Werbung:
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.
 
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.
 
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.
 
Werbung:
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.
 
Zurück
Oben