我有一个包含3列的表。该表存储特定日期的国家人口。简单的例子,
cen_date country population
2010 US 50
2010 Ger 10
2010 UK 5
2011 US 55
2011 Ger 15
2011 UK 10
2011 China 100
我想做的是有一个如下表格,
2010 2011
US 50 55
Ger 10 15
UK 5 10
China NULL 100
所以你会注意到2010年中国没有数据,但我仍然希望在上表中包含这些数据但是为NULL。
更新
通过一些跟踪和错误,下面的查询现在可以正常工作
select *
from
(
select country, cen_date , population
from Country_Pop
) org
pivot
(
max(population)
for cen_date in ([2009-01-01], [2010-01-01], [2011-01-01])
) piv;
不完全确定为什么这个工作。我想我必须首先创建一个不同国家的列表,但猜测它必须与max和pivot函数有关吗?
答案 0 :(得分:0)
步骤1.查找不同年份的总数。(按照您想要的顺序排列年份。如果找到新年,则添加一列)
步骤2.找到所有不同的国家/地区名称。(只需将它们设为行,如果找不到新国家/地区则添加行)
步骤3.现在填充数据
答案 1 :(得分:0)
这会有用吗?
SELECT
country,
[2010] = MAX(CASE WHEN cen_date = 2010 THEN population END),
[2011] = MAX(CASE WHEN cen_date = 2011 THEN population END)
FROM Test
GROUP BY country