2011-10-20 8 views
2

年に複数の列に日付列を分割しようとしています。私が最後にロールアップ小計を達成できればそれはすばらしいことになるでしょう。年に複数の列に日付列を分割する必要があります

私はそれを行う最善の方法は.NETデータリストコントロールを使用していると思っていますが、私は提案に開放されています。

例データ:

DATE  | SALES 
1/1/2009 | 1234.56 
2/1/2009 | 4567.89 
3/1/2009 | 7890.12 
... 
1/1/2010 | 3456.78 
... 
1/1/2011 | 8901.23 

所望の出力:事前に

 2009  2010  2011 
Jan 1234.56 3456.78 8901.23 
Feb 4567.89 ... 

ありがとう!

答えて

2

あなたのバックエンドについては言及しなかったが、他には言及しているとして、PIVOTの構文はSQLとOracleの現在のバージョンで動作します。バックエンドでサポートされていない場合は、SUM/CASEを使用することもできます。

SELECT MONTH([date]) AS mo, 
     SUM(CASE 
     WHEN YEAR([date]) = YEAR(Dateadd(YEAR, -2, Getdate())) THEN score 
     ELSE 0 
     END)   AS y1, 
     SUM(CASE 
     WHEN YEAR([date]) = YEAR(Dateadd(YEAR, -1, Getdate())) THEN score 
     ELSE 0 
     END)   AS y2, 
     SUM(CASE 
     WHEN YEAR([date]) = YEAR(Getdate()) THEN score 
     ELSE 0 
     END)   AS y3 
FROM tablenamehere 
WHERE (vendor = 'vendornamehere') 
GROUP BY MONTH([date]) 

もう1つのオプションは、データをピボットするC#コードのuse Linqです。これは、すでにデータをメモリに保存していて、もう一度DBに戻る必要がない場合に特に便利です。

(ジョンSkeetsではなく、販売のスコアを使用)この例はSample for 7837475

+0

これはちょっと近いで見つけましたが、私は滝を見表で終了することができます。 Dangのコメントは改行をサポートしていません...または、私はそれがどのように見えるかを示します。 これは役立ちます... 3年間(別名列)のデータは36行を生成します。私は12行3列を持つ必要があります。 – s15199d

+0

btw ...ここで私の現在のSQL "月([日付])を選択します。年(日付)=年(dateadd(年、-2、getdate())は、 YEAR([date])= year(getdate())THEN SALES ELSE 0 Y2、YEAR([date])= year(getdate()) ELSE 0 END AS Y3 FROM tablename where WHERE(vendor = 'vendornamehere') " – s15199d

+0

SUMSを忘れてグループ化しました。例については、[Sample for 7837475](http://data.stackexchange.com/stackoverflow/s/1981/sample-for-7837475) –

関連する問題