1

共通のインデックスとして「ピリオド」を使用して、HとTの価格に別々の列を作成したいと思います。私がこれについてどうすべきかについての提案はありますか?

これは私のSQLクエリが現時点で生成するものです:

ここに画像の説明を入力してください

4

4 に答える 4

3

GROUP BY次のように、条件付きを使用できます。

SELECT
    period
,   SUM(CASE NAME WHEN 'H' THEN price ELSE 0 END) as HPrice
,   SUM(CASE NAME WHEN 'T' THEN price ELSE 0 END) as TPrice
FROM MyTable
GROUP BY period
于 2013-01-30T01:00:49.670 に答える
3

次のことができます。

SELECT period, 
    max(CASE WHEN name = 'H' THEN price END) as h_price,
    max(CASE WHEN name = 'T' THEN price END) as t_price
FROM myTable
GROUP by period
于 2013-01-30T01:01:16.447 に答える
1

これについてはゲームに少し遅れていますが、データをピボットすることもできます。

サンプルテーブルを作成しましょう。

CREATE TABLE myData(period int, price decimal(12,4), name varchar(10))
GO
-- Inserting Data into Table

INSERT INTO myData
(period, price, name)
VALUES
(1, 53.0450, 'H'),
(1, 55.7445, 'T'),
(2, 61.2827, 'H'),
(2, 66.0544, 'T'),
(3, 61.3405, 'H'),
(3, 66.0327, 'T');

次に、ピボットを実行して選択します。

SELECT period, H, T
FROM (
SELECT period, price, name
FROM myData) d
PIVOT (SUM(price) FOR name IN (H, T)) AS pvt
ORDER BY period

この手法は、テーブルのヘッダーに表示される列を取り込む動的SQLスクリプトを作成する必要がある場合に使用しました。ケースステートメントは必要ありません。

ケースとピボットのパフォーマンスについてはよくわかりません。たぶん、もう少し経験のある人が、より良いパフォーマンスを与えるコメントを追加することができます。

于 2013-01-30T01:21:22.697 に答える
1

テーブルを再作成するつもりなら?

1)期間、price_h、price_tの列を持つ新しいテーブルを作成します。

2)すべての(個別の)期間を新しいテーブルの期間にコピーします。

3)name = Hであるすべての価格を、期間列に参加している新しいテーブルのprice_hにコピーします。

4)price_t....に対して3を繰り返します。

幸運を!

于 2013-01-30T01:06:00.897 に答える