2012-04-19 7 views
0

以下の表1に示すサンプルデータを持つデータベースがあります。表2または表3のいずれかの形式でSQLクエリを表示するにはどうすればよいですか?%表示するSQLクエリー

 
Table 1       Table 2      
Date  | Value   Year | Week | Total Value | % Change    
------------+-------   ------+-----+--|---------------|---------- 
19/12/2011 | 60    2012 | 1 |  295  | 656.41%    
20/12/2011 | 49    2012 | 0 |  39  | -80.98%    
21/12/2011 | 42    2012 | 52 |  205  | -41.76%    
22/12/2011 | 57    2011 | 51 |  352  |     
23/12/2011 | 88 
24/12/2011 | 18    Table 3      
25/12/2011 | 38    Year | Week | SUM1 | Year | Week | SUM2 | % Change 
26/12/2011 | 16    ------+--------+--------+--------+--------+--------+----------- 
27/12/2011 | 66    2012 | 1 | 295 | 2012 | 0 | 39 | 656.41% 
28/12/2011 | 21    2012 | 0 | 39 | 2011 | 52 | 205 | -80.98% 
29/12/2011 | 79    2011 | 52 | 205 | 2011 | 51 | 352 | -41.76%    
30/12/2011 | 7    2011 | 51 | 352 |  
31/12/2011 | 16 
01/01/2012 | 39 
02/01/2012 | 17 
03/01/2012 | 86 
04/01/2012 | 55 
05/01/2012 | 82 
06/01/2012 | 0 
07/01/2012 | 9 
08/01/2012 | 46 
+1

なぜ別のテーブルの形式でデータを表示したいのですか?なぜそのテーブルを表示/アクセスしないのですか? – SpeedCrazy

+0

@SpeedCrazy - おそらく彼は計算を表示したいですか? –

+0

@louis - どのように%変化を計算しますか?どの数字を比較していますか? –

答えて

1

私の好みは年/週レベルに表1に集約する1つのクエリを実行することで、その後、ご使用の環境に応じて、別の言語で「変化%」を行うだろう。ただし、SQLのみのソリューションが本当に必要な場合は、このようなことを行うことができます。

create table t1 as 
    select year(Date) as year, week(Date) as week, sum(Value) as totalvalue 
    from table1 
    group by year(Date) as year, week(Date) as week 
    order by Date desc 
; 

select a.year, a.month, a.totalvalue, 
(a.totalvalue-b.totalvalue)/b.totalvalue as pct_change 
from (
    select year, month, totalvalue, 
    case when week>1 then week-1 else 52 end as prevweek, 
    case when week>1 then year else year-1 end as prevyear 
    from t1 
) a 
    left outer join t1 b 
    on a.prevweek=b.week and a.prevyear =b.year 
; 
+0

はい、私はSQLの外でpct_changeを行うのが好きですが、私の問題は私の貧弱なSQLの知識にあります!私はSQLで "CASE"を見つけたことはありませんでした。私はもう少し読んで、私の解決策にそれを適用します! –

関連する問題