踊れないダメ人間

本人は面白いと思ってるらしい

Archive for 5月 2015

音楽缶

leave a comment »

たまたまテレビつけてたらやってたんで見てたら...

水樹奈々、妖怪ウォッチ、仮面ライダー、俺物語...

 

今日はアニソン特集ですか?

Written by aoikagami

2015年5月10日 at 4:55 午後

カテゴリー: テレビ

SQL Serverで縦のものを横にする

leave a comment »

できたらいいなと思ってやってみたらできてしまった(笑)のでメモ

データベースで親子関係のある2つのテーブルがあったとする。

ID
1 ふー
2 ばー

 

ID 親のID
1 1 ほげ
2 1 ふが
3 2 ぴよ

 
これを結合してこんな風に表示したいときがある

親の値 子の値1 子の値2
ふー ほげ ふが
ばー ぴよ

 
こういう需要は割とあるようで、質問サイトでもときどき見かける。
回答はだいたい「親子を別に取得してプログラムで並べろ」ってなるんだけど、
ピボットテーブルを使ってSQLだけで取得できないか?と考えてやってみた。

で、できたSQLがこれ

— テスト用のテーブル
DECLARE @Parent TABLE([ID] INT, [値] NVARCHAR(100));
DECLARE @Child TABLE([ID] INT, [親のID] INT, [値] NVARCHAR(100));

INSERT INTO @Parent VALUES (1, N’ふー’), (2, N’ばー’);
INSERT INTO @Child VALUES (1, 1, N’ほげ’), (2, 1, N’ふが’), (3, 2, N’ぴよ’);

— ここから取得用SQL
WITH
[TargetSource] AS
(
SELECT
p.[ID] AS [ID]
,p.[値] AS [親の値]
,c.[値] AS [子の値]
,ROW_NUMBER() OVER (PARTITION BY p.[ID] ORDER BY c.[ID]) AS [Seq]
FROM
@Parent p
LEFT OUTER JOIN @Child c ON p.[ID] = c.[親のID]
)
SELECT
[親の値]
,[1] AS [子の値1]
,[2] AS [子の値2]
FROM
(
SELECT [ID], [親の値], [子の値], [Seq] FROM [TargetSource]) src
PIVOT
(MAX([子の値]) FOR [Seq] IN ([1], [2])) pvt
ORDER BY
[ID]

 

これがどうなっているかというと、
まず、対象データをテーブル変数で作成

DECLARE @Parent TABLE([ID] INT, [値] NVARCHAR(100));
DECLARE @Child TABLE([ID] INT, [親のID] INT, [値] NVARCHAR(100));

INSERT INTO @Parent VALUES (1, N’ふー’), (2, N’ばー’);
INSERT INTO @Child VALUES (1, 1, N’ほげ’), (2, 1, N’ふが’), (3, 2, N’ぴよ’);

 
対象データを結合、その際に子のレコードに対して親ごとに連番を振る。
これを共通テーブル式にする。

WITH
[TargetSource] AS
(
SELECT
p.[ID] AS [ID]
,p.[値] AS [親の値]
,c.[値] AS [子の値]
,ROW_NUMBER() OVER (PARTITION BY p.[ID] ORDER BY c.[ID]) AS [Seq] ←親ごとの連番
FROM
@Parent p
LEFT OUTER JOIN @Child c ON p.[ID] = c.[親のID]
)

 
振られた連番をもとにピボットテーブルを作成する。
今回取得するデータは文字列型なので、ピボットテーブルで使用できる集計関数はMIN()とMAX()だけ。
集計関数はダミーなので、どっちにしろMIN()かMAX()しか使わないと思う(どっちを使っても結果は同じ)

SELECT
[親の値]
,[1] AS [子の値1]
,[2] AS [子の値2]
FROM
(
SELECT [ID], [親の値], [子の値], [Seq] FROM [TargetSource]) src
PIVOT
(MAX([子の値]) FOR [Seq] IN ([1], [2])) pvt
ORDER BY
[ID]

 

あらかじめ取得するフィールドの数がわかってないとこの方法は使えないのが難点。
わからない場合は一旦フィールド数を取ってきてからSQLを動的に作成するか、上にも書いたように
親子のレコードを別々に取得して出力時に並べるかしないとダメ。

と、いうわけで、余程のことがない限り無理して使う必要はないというwwww

あ、言い忘れてたけど、これはピボットテーブルの「正しい」使用法ではないのでご注意

Written by aoikagami

2015年5月10日 at 2:17 午後

妻恋坂

leave a comment »

アキバの北あたりに妻恋坂っていう坂がある。

この間そこを通った時に
「きっとここで年に一回奥さんに愛してると言ってみるイベントが開かれているに違いない!」
などと訳の分からないことを思いつき、家に帰って早速調べてみた。

そんなイベントはなかったよ...

つまらん

Written by aoikagami

2015年5月10日 at 2:11 午後

カテゴリー: おでかけ

MdN2014/06

leave a comment »

67ページの最後らへん

「うめ先生自身エロゲの作家では無いけど」

藤宮アプ...うっ頭が

Written by aoikagami

2015年5月8日 at 9:52 午後

カテゴリー:

Tagged with

Windows10のMSゴシック

leave a comment »

デザイン界隈で大変評判の悪いMSゴシック
ふと気になって調べてみたら、Windows10でも何も変わりはなかった。
8.1と比べてバージョンもファイルハッシュも同じ、つまり完全に一致。
悪名高いビットマップデータもそのまま。

つまり、Windows10になってもClearTypeの恩恵にはあずかれない
10年以上前から言われ続けてるのに、このMSKKの仕事っぷりときたら(笑)

なお、Build10074での比較結果なので、今後どうなるかはわかりません。
ま、どうにもならないだろうけどね。

Written by aoikagami

2015年5月8日 at 6:47 午後

MSDN Professional更新

leave a comment »

結局この前買ったところ(SEshop.com)が一番安かったので今回もそこで。

7月にWindows 10と同時にVisual Studio 2015のRTMがたぶん出るんで、
その時にライセンス体系が変わって安くなったりして俺涙目になるんだろうな...
※UltimateとPremiumが統合されてEnterpriseっていう新しいのになってPremiumの価格になるっていうのは
決定事項らしい
http://blogs.msdn.com/b/visualstudio/archive/2015/03/31/announcing-the-visual-studio-2015-product-line.aspx

Written by aoikagami

2015年5月4日 at 7:31 午後