我遇到下表sales
:
country 2017-Q4 2017-Q3 2017-Q2 ... 1985-Q1
----------------------------------------------------------
Germany 100 200 75 10
Senegal 20 50 130 NULL
Belgium 150 66 22 5
我无法有效地查询,例如" 2017年至第三季度的德国销售"。
我想按照以下方式重新格式化此表:
country quarter sales
---------------------------
Germany 2017-Q4 100
Germany 2017-Q3 200
...
Belgium 1985-Q1 5
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
我会使用cross apply
执行此操作:
select v.*
from t cross apply
(values (t.country, '2017-Q4', [2017-Q4]),
(t.country, '2017-Q3', [2017-Q3]),
. . .
) v(country, quarter, sales);
您也可以使用unpivot
或union all
查询执行此操作。 apply
语法实现横向连接,它们非常强大(并且还有许多其他用途)。我发现unpivot
是非常定制的语法,可以做一件事(因此最好学习横向连接)。
union all
效率较低,因为它多次读取表格。