2014-01-17 14 views
0

我不确定是否使用数据透视表,因为我对此感到困惑。我在Fiddlems SQL将多行连接到多行列

,我正在寻找的是(不要紧,如果空记录null或空字符串)

Name Product m1SALES m1STARGET m1GROWTH m2SALES m2STARGET m2GROWTH m3SALES m3STARGET M3GROWTH 
----------------------------------------------------------------------------------------- 
John A 5 100 5  10  100  10  NULL NULL  NULL 
John B NULL NULL  NULL  NULL NULL  NULL  20  100 20 

我只在任何时候需要四分之一的记录,结果得到了一些样本数据时间。 1,2,3或4,5,6或7,8,9或10,11,12。 在月份+年份取决于数据的情况下,可能在某个月份没有销售记录。

我试过从同一张表中选择数据取决于月份+年份3次,但没有运气。

回答

0

这是一个有点原始,但会做的工作没有支点:

SELECT DISTINCT 
     name , 
     product , 
     (SELECT sales 
      FROM  yourtable b 
      WHERE  a.product = b.product 
        AND MONTH = 1 
        AND YEAR = 2014 
     ) m1sales , 
     (SELECT starget 
      FROM  yourtable b 
      WHERE  a.product = b.product 
        AND MONTH = 1 
        AND YEAR = 2014 
     ) m1starget , 
     (SELECT growth 
      FROM  yourtable b 
      WHERE  a.product = b.product 
        AND MONTH = 1 
        AND YEAR = 2014 
     ) m1growth , 
     (SELECT sales 
      FROM  yourtable b 
      WHERE  a.product = b.product 
        AND MONTH = 2 
        AND YEAR = 2014 
     ) m2sales , 
     (SELECT starget 
      FROM  yourtable b 
      WHERE  a.product = b.product 
        AND MONTH = 2 
        AND YEAR = 2014 
     ) m2starget , 
     (SELECT growth 
      FROM  yourtable b 
      WHERE  a.product = b.product 
        AND MONTH = 2 
        AND YEAR = 2014 
     ) m2growth , 
     (SELECT sales 
      FROM  yourtable b 
      WHERE  a.product = b.product 
        AND MONTH = 3 
        AND YEAR = 2014 
     ) m3sales , 
     (SELECT starget 
      FROM  yourtable b 
      WHERE  a.product = b.product 
        AND MONTH = 3 
        AND YEAR = 2014 
     ) m3starget , 
     (SELECT growth 
      FROM  yourtable b 
      WHERE  a.product = b.product 
        AND MONTH = 3 
        AND YEAR = 2014 
     ) m3growth 
FROM yourtable a 
+0

甜!如果列表中出现不同的名称,也可以添加a.name = b.name。 – soniality