【发布时间】:2017-10-04 16:55:45
【问题描述】:
想象一下源表架构:
Table1: ID*, ValueA, ValueB, ValueX1, ValueX2, ValueX3, ValueY1, ValueY2, ValueY3
和目标表Schema:
TableA: ID*, ValueA, ValueB
TableB: ID*, Type*, Value1, Value2, Value3
Table1 中的单行由 TableA 中的 1 行和 TableB 中的 2 行表示(一个为 X,另一个为 Y)
是的,前一个模式的存在让我很难过。不,不是我写的。不,我不能直接改变它。 :(
我想纠正一个查询以将Table1 转换为TableB(显然,得到TableA 很容易。)
我知道如何使用UNION ALL 来做到这一点,但这会很难看。 (尤其是因为(X,Y) 实际上是(P,Q,R,S,T,U,V,W,X,Y,Z),而1 ... 3 实际上是1 ... 15。叹息)
我觉得PIVOT/UNPIVOT 有点模糊,但我看不到任何专门处理这个问题的东西 - 我总是看到一些只移动单列或单列组的东西。
在任何意义上,这可以在 T-SQL 中优雅地完成吗?
【问题讨论】:
标签: sql-server tsql pivot unpivot flatten