Abfrageergebnis in einer Zeile zusammenfassen für neue Tabelle

05/10/2009 - 10:18 von Marcel Spranger | Report spam
Hallo!

Ich denke der Betreff verwirrt etwas aber mir ist nix anderes eingefallen.

Mein Problem:

Ich habe eine Tabelle mit Artikelnummer, Menge und Preis.
Dort sind für jeden Artikel mindestens eine oder auch mehr (Staffelpreise)
Zeilen vorhanden.

Ich muss diese nun per Script in eine andere Tabelle einfügen.
Diese hat folgende Struktur: Artikelnummer, Menge1, Preis1, Menge2,
Preis2...insgesamt 4 Mengen und Preise.

Die ersten 4 Mengen mit Preisen auslesen ist kein Thema
select top 4 menge, preis from preise oder by menge

Der Update Befehl ist mir auch klar.

Nur wie bekomme ich jetzt die 4 Ergebnisse in die eine Zeile der anderen
Tabelle? Ich habe versucht die Mengen und Preise auf Variablen zu legen,
habe das aber nicht hinbekommen.

Hat jemand einen Ansatz für mich?

Vielen Dank!

Marcel
 

Lesen sie die antworten

#1 Frank Kalis
05/10/2009 - 10:43 | Warnen spam
"Marcel Spranger" <"marcel-spranger[at]gm" wrote:
Mein Problem:

Ich habe eine Tabelle mit Artikelnummer, Menge und Preis.
Dort sind für jeden Artikel mindestens eine oder auch mehr (Staffelpreise)
Zeilen vorhanden.

Ich muss diese nun per Script in eine andere Tabelle einfügen.
Diese hat folgende Struktur: Artikelnummer, Menge1, Preis1, Menge2,
Preis2...insgesamt 4 Mengen und Preise.

Die ersten 4 Mengen mit Preisen auslesen ist kein Thema
select top 4 menge, preis from preise oder by menge

Der Update Befehl ist mir auch klar.

Nur wie bekomme ich jetzt die 4 Ergebnisse in die eine Zeile der anderen
Tabelle? Ich habe versucht die Mengen und Preise auf Variablen zu legen,
habe das aber nicht hinbekommen.

Hat jemand einen Ansatz für mich?




Etwas in dieser Richtung könnte funktionieren:

DECLARE @t TABLE (id int IDENTITY,artikelnummer int, menge int, preis int)

INSERT INTO @t SELECT 1, 2, 3
INSERT INTO @t SELECT 1, 2, 5
INSERT INTO @t SELECT 1, 2, 7
INSERT INTO @t SELECT 1, 2, 9


SELECT
artikelnummer,
MIN(CASE WHEN rn = 1 THEN menge ELSE NULL END) AS menge1,
MIN(CASE WHEN rn = 2 THEN menge ELSE NULL END) AS menge2,
MIN(CASE WHEN rn = 3 THEN menge ELSE NULL END) AS menge3,
MIN(CASE WHEN rn = 4 THEN menge ELSE NULL END) AS menge4,
MIN(CASE WHEN rn = 1 THEN preis ELSE NULL END) AS preis1,
MIN(CASE WHEN rn = 2 THEN preis ELSE NULL END) AS preis2,
MIN(CASE WHEN rn = 3 THEN preis ELSE NULL END) AS preis3,
MIN(CASE WHEN rn = 4 THEN preis ELSE NULL END) AS preis4
FROM
(SELECT
ROW_NUMBER() OVER (PARTITION BY artikelnummer ORDER BY id) AS rn,
*
FROM
@t) X
GROUP BY
X.artikelnummer


Frank Kalis
Microsoft SQL Server MVP
Webmaster: http://www.insidesql.org

Ähnliche fragen