使用pivot重组表中的数据并处理空值

时间:2015-03-25 10:41:59

标签: mysql sql sql-server

我有一个包含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函数有关吗?

2 个答案:

答案 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