次のようなデータを含むテーブルがあります。
date met val
2012-10-18 avgt 63.3617
2012-10-16 avgt 65.7312
2012-10-19 avgt 66.4952
2012-10-17 avgt 67.3747
2012-10-18 cdd 53.3617
2012-10-17 cdd 55.3472
2012-10-19 cdd 66.8063
2012-10-16 cdd 67.3116
2012-10-18 maxt 43.3617
2012-10-19 maxt 47.4484
2012-10-16 maxt 65.9559
2012-10-17 maxt 66.2868
2012-10-19 mint 56.0447
2012-10-16 mint 65.0656
2012-10-18 mint 65.0656
2012-10-17 mint 66.4952
met列には、 val列のデータにラベルを付ける 4 つの可能な値 (avgt、mint、maxt、cdd、hdd) しかありません。次のようにデータを再配置するクエリ (おそらくストアド プロシージャ) が必要です。
date avgt cdd maxt mint
2012-10-16 65.7312 67.3116 65.9559 65.0656
2012-10-17 67.3747 55.3472 66.2868 66.4952
2012-10-18 63.3617 53.3617 43.3617 65.0656
2012-10-19 56.0447 66.8063 47.4484 56.0447
これを静的な方法で行うのは簡単です。しかし、列の値が実際に何であるかに関係なく、再配置が適切met
に行われるように、これを動的に実行したいと考えています。
これを手動で行う方法は次のとおりです。
追加の列を追加します。ALTER TABLE MYTABLE
ADD COLUMN avgt FLOAT( 15, 5 ) NOT NULL AFTER val ,
ADD COLUMN mint FLOAT( 15, 5 ) NOT NULL AFTER avgt ,
ADD COLUMN maxt FLOAT( 15, 5 ) NOT NULL AFTER mint ,
ADD COLUMN cdd FLOAT( 15, 5 ) NOT NULL AFTER hdd
各行で新しい列を更新します。
UPDATE MYTABLE
SET avgt = val WHERE metric == 'avgt';
SET mint = val WHERE metric == 'mint';
SET maxt = val WHERE metric == 'maxt';
SET cdd = val WHERE metric == 'cdd';
古い列を削除する
ALTER TABLE MYTABLE
DROP COLUMN met,
DROP COLUMN val;
met
一意の値
のリストを取得する方法も理解しています:SELECT DISTINCT met FROM MYTABLE
その間のロジックに欠けているもの。個別の値を反復処理する必要があります。誰かがそれで私を助けることができれば、私はそれを大いに感謝します.
純粋な SQL (おそらくストアド プロシージャ) または Python で記述された回答を受け入れます。
ありがとうございます!