2017-06-01 5 views
0

Eine andere Zeit, ein anderes Problem. Ich habe die folgende Tabelle:SQL - Pivot oder Unpivot?

|assemb.|Repl_1|Repl_2|Repl_3|Repl_4|Repl_5|Amount_1|Amount_2|Amount_3|Amount_4|Amount_5| 
|---------------------------------------------------------------------------------------| 
|4711001|111000|222000|333000|444000|555000|  1|  1|  1|  1|  1| 
|---------------------------------------------------------------------------------------| 
|4711002|222000|333000|444000|555000|666000|  1|  1|  1|  1|  1| 
|---------------------------------------------------------------------------------------| 

Und hier, was ich brauche:

|Article|Amount| 
|--------------| 
| 111000|  1| 
|--------------| 
| 222000|  2| 
|--------------| 
| 333000|  2| 
|--------------| 
| 444000|  2| 
|--------------| 
| 555000|  2| 
|--------------| 
| 666000|  1| 
|--------------- 

Repl_1 zu Repl_10 sind Ersatz-Artikel der Versammlung. Ich kann n Assemblys mit bis zu 10 Rep-Artikeln haben. Am Ende muss ich alle Artikel mit ihren Mengen aller Baugruppen im Überblick haben.

THX.

Beste greetz Vegeta

+0

Vielleicht https://stackoverflow.com/questions/44300613/how-to-unpivot-for-multiple-columns-sqlserver – TriV

+0

Ja. DANKE. Versuchen Sie CROSS APPLY ist was ich brauche. Und nun? Wie kann ich für dich stimmen? Oder muss ich meine Frage beantworten? –

+0

Sie könnten Ihren Beitrag mit Ihrer Antwort bearbeiten :) – TriV

Antwort

0

Dies ist wahrscheinlich der schnellste Weg, um es UNION ALL Verwendung zu erreichen. Allerdings würde ich empfehlen Tisch Normalisierung

SELECT Article, SUM(Amount) FROM (
    SELECT Repl_1 AS Article, SUM(Amount_1) AS Amount FROM #Test GROUP BY Repl_1 
    UNION ALL 
    SELECT Repl_2 AS Article, SUM(Amount_2) AS Amount FROM #Test GROUP BY Repl_2 
    UNION ALL 
    SELECT Repl_3 AS Article, SUM(Amount_3) AS Amount FROM #Test GROUP BY Repl_3 
    UNION ALL 
    SELECT Repl_4 AS Article, SUM(Amount_4) AS Amount FROM #Test GROUP BY Repl_4 
    UNION ALL 
    SELECT Repl_5 AS Article, SUM(Amount_5) AS Amount FROM #Test GROUP BY Repl_5 
) tbl GROUP BY Article