2014-03-26 125 views
1

我想移调test表到Flip表基于Prop_idSQL Fiddle通过从test.cost.移调SQL表

填充倒装表Null值非常感谢

编辑从SqlFiddle采取

表结构:

来源:

CREATE TABLE test(
    Prop_id varchar(10), 
    year varchar(4), 
    cost float(8) 
) 

目的地:

CREATE TABLE flip(
    Prop_id varchar(10), 
    y1997 varchar(4), 
    y1998 varchar(4), 
    y1999 varchar(4), 
    y2000 varchar(4), 
    y2001 varchar(4), 
    y2002 varchar(4), 
    y2003 varchar(4), 
    y2004 varchar(4), 
    y2005 varchar(4), 
    y2006 varchar(4), 
    y2007 varchar(4), 
    y2008 varchar(4), 
    y2009 varchar(4), 
    y2010 varchar(4), 
    y2011 varchar(4), 
    y2012 varchar(4), 
    y2013 varchar(4)  
) 
+0

问题是什么? – Kaf

+0

我需要通过填写成本字段中的年份来填充测试表中的翻转表。 – user2722043

+0

您是否计划每年都有一张表格,并且每年都会增加一个新的年份列表? –

回答

1

这是一个简单的PIVOT:。

INSERT INTO Flip(Prop_id, y1997, y1998, y1999, y2000, y2001, ...) 
    SELECT prop_id, [1997], [1998], [1999], [2000], [2001], ... 
    FROM 
    test 
    PIVOT 
    (
    SUM(cost) 
    for year IN ([1997], [1998], [1999], [2000], [2001], ...) 
)pvt; 

SqlFiddle here

如果不想手动指定的列名,就可以变成一个dynamic query like so这一点。

一个可能的建议是改变翻转y1997等的列相匹配的相同类型源表(test.cost

如果可能的话,使用DECIMAL货币模型 - 花车和双打是一个坏适合钱因rounding issues

+0

StuartLC,非常感谢那份工作完美如我所愿,我非常感谢您的建议。 – user2722043

+0

我不介意,谢谢。 – user2722043