none
Datensatz duplizieren und ändern RRS feed

  • 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 Euro

    Jetzt 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 Euro

    4711 - 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

    Montag, 9. November 2015 09:38

Antworten

  • With Auftraege as
    (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 <> '';
    HTH!

    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu


    Dienstag, 10. November 2015 08:14

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

    Montag, 9. November 2015 13:55
  • 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 Euro

    Vielen Dank im Voraus

    Reinhard

    Dienstag, 10. November 2015 08:04
  • With Auftraege as
    (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 <> '';
    HTH!

    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu


    Dienstag, 10. November 2015 08:14
  • Perfekt !!!

    Ganz vielen Dank... Sie haben mir sehr geholfen.

    Reinhard

    Dienstag, 10. November 2015 08:47