Sql 从组织为矩阵的表中创建可搜索的表
我面临下表Sql 从组织为矩阵的表中创建可搜索的表,sql,sql-server,Sql,Sql Server,我面临下表销售: country 2017-Q4 2017-Q3 2017-Q2 ... 1985-Q1 ---------------------------------------------------------- Germany 100 200 75 10 Senegal 20 50 130 NULL Belgium
销售
:
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-Q3年德国销售额”
我想将此表的格式改为:
country quarter sales
---------------------------
Germany 2017-Q4 100
Germany 2017-Q3 200
...
Belgium 1985-Q1 5
有人能帮我完成这项工作吗?我会使用
交叉应用:
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
效率较低,因为它多次读取表。UNPIVOT