SQLのデータをピボットしたい

随分と久しぶりの投稿。

何年も前に作成した業務アプリを作り変えることになった。
以前のは、Accessをインターフェースにして、VBで作ってあったものを、今回はC#で作り直すことになった。

まぁこれといって大きな壁はないものの、唯一、DBのデータをPIVOTして表示するというところで、躓いたのでメモ。

開発環境は VisualStudio2016 + SQLServer2014 C# Livet

最初、SQL側のストアドでPIVOTして、結果を返そうと思ったが、PIVOTさせたいデータは、支払予定なので、Keyごとに月数がバラバラ。ということは、ストアドのOutPutパラメータの型が確定できない?どうしたら良いかよくわからんので、この方法は却下。

ならば、LINQでPIVOTして表示させようかと調べたが、月数(列数)が不定なので、動的な処理が必要。LINQは基本的に動的処理ができません。。。

結局、ちょっぴり古いDataTableを使ってピボットすることに。
手順としては、

ピボット集計させたいデータをLINQで取得。DataTableに入れておく。
DataTableをピボット集計するコードを

を参考に作成。てか、ほぼ丸写し。

出来上がったDataTableをDataGridに放り込んで出来上がり。。。のはずが集計値が表示されません。

散々悩んで、泥庭というサイトを拝見しましたら、

「これ、おんなじじゃね?」ということで、解決しました。泥庭の管理者さん、ありがとうございました。

ピボットさせる元データの日付部分を"yyyy/MM/dd"から"yyyy年MM月"に変更して完了。

こういうデータを

こういう集計に変更できました。

おすすめの記事