Benutzer mit den meisten Antworten
Datensatz duplizieren und ändern

Frage
-
Hallo,
ich habe folgendes Problem und bitte um eure Hilfe:
Für eine Auswertung muss ich innerhalb einer Abfrage (oder View) im SQL-Server einen
Datensatz duplizieren.Beispiel:
Auftrag - Artikel - Werksauftrag - Erlös
4711 - A1 - WA1 - 60 Euro
4711 - A1 - WA2 - 40 Euro
4711 - Rüstkosten - - 10 EuroJetzt sollen innerhalb der Abfrage nur die Rüstkosten
entsprechend der Erlöse auf die Weksaufträge verteilt werden.Ergebnis:
Auftrag - Artikel - Werksauftrag - Erlös
4711 - A1 - WA1 - 60 Euro
4711 - A1 - WA2 - 40 Euro4711 - Rüstkosten - WA1 - 6 Euro
4711 - Rüstkosten - WA2 - 4 Euro
Das ganze soll mit Daten aus sehr vielen Aufträgen geschehen und die
Aufteilung erfolgt nur für bestimmte Artikel.Hat dazu jemand eine Idee?
Danke im Voraus
Reinhard
Antworten
-
With Auftraege as
HTH!
(Select Auftrag, Artikel, Werksauftrag, Erloes, Erloes / SUM(Erloes) OVER(PARTITION BY Auftrag) as Anteil
from @tbl
where Werksauftrag <> '')
Select t.Auftrag, t.Artikel, a.Werksauftrag, t.Erloes * a.Anteil as Erloes
from @tbl t
inner Join Auftraege a
on t.Auftrag = a.Auftrag
where t.Werksauftrag = ''
UNION ALL
Select Auftrag, Artikel, Werksauftrag, Erloes
from @tbl
where Werksauftrag <> '';
Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu
- Bearbeitet Christoph Muthmann Dienstag, 10. November 2015 08:15
- Als Antwort markiert schmiedemeister Dienstag, 10. November 2015 08:47
Alle Antworten
-
Hallo Reinhard,
das hier könnte ein Lösungsansatz sein.Declare @tbl as Table (Auftrag int, Artikel varchar(20), Werksauftrag varchar(5), Erloes decimal(3)); Insert into @tbl (Auftrag, Artikel, Werksauftrag, Erloes) values (4711, 'A1', 'WA1', 60), (4711, 'A1', 'WA2', 40), (4711, 'Rüstkosten', '', 10) ; Select Auftrag, Artikel, Werksauftrag, Erloes, SUM(Erloes) OVER(PARTITION BY Auftrag) as Gesamt, Erloes / SUM(Erloes) OVER(PARTITION BY Auftrag) as Anteil from @tbl where Werksauftrag <> ''; With Auftraege as (Select Auftrag, Artikel, Werksauftrag, Erloes, SUM(Erloes) OVER(PARTITION BY Auftrag) as Gesamt, Erloes / SUM(Erloes) OVER(PARTITION BY Auftrag) as Anteil from @tbl where Werksauftrag <> '') Select t.Auftrag, t.Artikel, a.Werksauftrag, t.Erloes * a.Anteil as Anteil from @tbl t inner Join Auftraege a on t.Auftrag = a.Auftrag where t.Werksauftrag = '';
Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu
-
Das passt schon richtig gut. Ganz herzlichen Dank.
Ist es jetzt noch möglich die beiden Ergebnisse in ein Ergebnis zu bringen??
So:
Auftrag - Artikel - Werksauftrag - Erlös
4711 - A1 - WA1 - 60 Euro
4711 - A1 - WA2 - 40 Euro
4711 - Rüstkosten - WA1 - 6 Euro
4711 - Rüstkosten - WA2 - 4 EuroVielen Dank im Voraus
Reinhard
-
With Auftraege as
HTH!
(Select Auftrag, Artikel, Werksauftrag, Erloes, Erloes / SUM(Erloes) OVER(PARTITION BY Auftrag) as Anteil
from @tbl
where Werksauftrag <> '')
Select t.Auftrag, t.Artikel, a.Werksauftrag, t.Erloes * a.Anteil as Erloes
from @tbl t
inner Join Auftraege a
on t.Auftrag = a.Auftrag
where t.Werksauftrag = ''
UNION ALL
Select Auftrag, Artikel, Werksauftrag, Erloes
from @tbl
where Werksauftrag <> '';
Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu
- Bearbeitet Christoph Muthmann Dienstag, 10. November 2015 08:15
- Als Antwort markiert schmiedemeister Dienstag, 10. November 2015 08:47