2014-01-17 17 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