SQL - Pivot还是Unpivot?

时间:2017-06-01 09:13:11

标签: sql sql-server sql-server-2008 pivot 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|
|---------------------------------------------------------------------------------------|

这就是我的需要:

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

Repl_1到Repl_10是程序集的替换文章。我可以有n个装配,包含10个重复文章。最后,我需要概述所有文章的数量。

THX。

最好的问候 贝吉塔

1 个答案:

答案 0 :(得分:0)

这可能是使用UNION ALL实现目标的最快捷方式。但是,我建议将表格标准化

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