フィドルの例: http://sqlfiddle.com/#!3/419ec/3
SQL サーバー 2008。
以下の選択クエリで置換機能とアンピボット機能を使用して何が起こっているのかを誰かが説明してくれるかどうか疑問に思っていました。私はSQLの初心者であり、そのタイプのクエリのロジック(テーブルの非正規化)を理解していません。
CREATE TABLE TableB
([date] datetime, [Id] int, [name] varchar(3), [blah1] varchar(4), [hour1] int, [hour2] int, [hour3] int, [hour4] int)
;
INSERT INTO TableB
([date], [Id], [name], [blah1], [hour1], [hour2], [hour3], [hour4])
VALUES
('2013-04-01 00:00:00', 1, 'Jim', 'test', 129, 343, 54, 89),
('2013-04-01 00:00:00', 2, 'Bob', 'rewe', 45, 6, 45, 2),
('2013-04-02 00:00:00', 3, 'Joe', 'fdf', 7, 8, 4, 3)
クエリを選択:
select date,
id,
name,
replace(MightMouse, 'hour', '') hour,
observationvalue
from tableB
unpivot
(
observationvalue
for MightMouse in (hour1, hour2, hour3, hour4)
) unpiv
replace 関数の使い方は次のように考えました。
REPLACE ( string_expression , string_pattern , string_replacement )
string_expression
http://msdn.microsoft.com/en-us/library/ms186862.aspx
関数の定義によるとreplace
、string_expression は部分文字列が検索される文字列です (部分文字列は完全な文字列にすることができます)。例えば、
replace('mynameisjohn', 'john', '')
john
これにより、string_expressionの部分文字列が検索され、mynameisjohn
空の文字列に置き換えられ、結果として と等しい文字列が得られますmynameis
。
しかし、上記の例では、何が何なのかわかりませんMightyMouse
。MightyMouse
元の表にはありません。また、実行の流れのように、アンピボット部分がクエリにどのように収まるかもわかりません。
たとえば、これが python の場合、直感的なコードのロジックへの流れがあります。SQL を使用すると、醜いクエリを作成できるように見えますが、SQL の観点からは問題なく動作します。しかし、ユーザーの観点からは、クエリ コードのさまざまな部分で何が起こっているのかを分解するのは難しい場合があります。