Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从组织为矩阵的表中创建可搜索的表_Sql_Sql Server - Fatal编程技术网

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