2014-01-06 42 views
-1

表命名Data過程以月計算

coloumns是Id,Name,Supply,Demand,Date,Value

創建程序,其中

q1將包含季-1(JAN-MAR,供應/總和之和的供應指數的需求),

q2將包含第2季度供應指數(APR-JUN,供應總和/需求總和),

q3將包含季-3(JUL-SEP,的需求供應/總和之和)的供應指數,

Q4將包含Q4的供應指數(OCT-DEC,的供給/總和之和需求),YR將包含給定年份的供應指數(JAN-DEC,的需求供應/總和之和),並且它是由值隔開

樣本輸入:

 
ID  Name  Suppply Demand  date   value 
1  A   10  5   01 04 2001 20 
2  B   4  1   01 04 2001 20 
3  A   4  2   02 01 2005 10 
4  A   4  2   02 02 2005 10 
5  B   4  1   01 07 2001 20 

預期輸出

 
Name value q1 q2  q3 q4 
A   10 4  0  0  0 
A   20 0  2  0  0 
B   20 0  4  4  0 
+0

你期望的輸出不匹配預期輸出的說明。看看預期的產出,我不知道實力是什麼,或者第一季度A有4。鑑於此,要給出答案有點困難。 –

+3

從我們的常見問題解答:*詢問代碼的問題必須證明對所解決問題的最小理解。包括嘗試的解決方案,爲什麼他們不工作,以及預期的結果。*我們不在這裏爲你做功課。 – DanteTheEgregore

回答

0

所以,你想是這樣的:

CREATE TABLE #test 
    ( 
    id  INT, 
    name CHAR(1), 
    supply INT, 
    demand INT, 
    dates DATE, 
    value INT 
) 

INSERT INTO #test 
VALUES  (1, 
      'A', 
      10, 
      5, 
      '20010401', 
      20) 

INSERT INTO #test 
VALUES  (2, 
      'B', 
      4, 
      1, 
      '20010401', 
      20) 

INSERT INTO #test 
VALUES  (3, 
      'A', 
      4, 
      2, 
      '20050102', 
      10) 

INSERT INTO #test 
VALUES  (4, 
      'A', 
      4, 
      2, 
      '20050202', 
      10) 

INSERT INTO #test 
VALUES  (5, 
      'B', 
      4, 
      1, 
      '20010107', 
      20) 

SELECT name, 
     value, 
     Isnull([q1], 0), 
     Isnull([q2], 0), 
     Isnull([q3], 0), 
     Isnull([q4], 0) 
FROM (SELECT 'q' + Rtrim(Datepart(q, dates)) AS quarters, 
       name, 
       Sum(supply)/Sum(demand)  AS val, 
       value 
     FROM #test 
     GROUP BY Datepart(q, dates), 
        name, 
        value) p 
     PIVOT (Sum(val) 
      FOR quarters IN ([Q1], 
           [Q2], 
           [Q3], 
           [Q4])) AS pivottable; 

drop table #test 

下一次,請儘量組織更多的文字:)

+0

你能告訴我Rtrim(日期部分(q,日期))是什麼意思? – SaNa3819

+0

哦,這是我經常做的一個錯誤,我做了一個rtrim,因爲rtrim使用varchar進行強制轉換,並且寫入時間更短。 –