2015-03-25 17 views
0

我有一个包含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

是的,谢谢我发布的查询给了我一直在寻找的结果 – mHelpMe 2015-03-25 17:18:20

回答

0

步骤1.找到不同的年总没有。(安排年为了你want.Add列,如果新的一年里找到或没有)

第2步:找到所有不同国家的名称。(只是让他们行,加行,如果新的国家以极不)

步骤3.现在填写的DATAS

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