0

注:以下のいくつかの回答を試しました(Teradataにあるため、一部の回答ではどこでも構文エラーが発生しています)

ここで壁にぶち当たりました。年ごとに異なる列で比較したい

ID, Year, Revenue 
1, 2009, 10 
1, 2009, 20 
1, 2010, 20 
2, 2009, 5 
2, 2010, 50
2, 2010, 1

ID と年の両方で区切るにはどうすればよいですか?

最後はこんな感じでお願いします

ID, Year, Sum
1, 2009, 30
1, 2009, 20
...
2, 2010, 51

(理解のために大幅に編集されています)

4

5 に答える 5

1

あなたが提供した詳細の量で私があなたに与えることができる最善の方法は、テーブルをサブクエリに分割することです:

select t1.yr - t2.yr from 
 (select yr 
   from the_table where yr = 2010) t1, 
 (select yr 
   from the_table where yr = 2010) t2

使用しているデータベースのタイプ、テーブルの実際の構造などがわかれば、より詳細な情報を提供できますが、おそらくこれで始めることができます.

于 2011-06-23T19:35:55.753 に答える
1

このようなもの:

select id, t2009.year, t.2010.year, t2010.year-t.2009.year diff
from
( select id, year
from mytable
where year = 2009
) t2009
,
( select id, year
from mytable
where year = 2010
) t2010
于 2011-06-23T19:36:26.893 に答える
0

ほとんどの場合、自己参加する必要があります

SELECT [what you are comparing] FROM [table] t1
  [INNER/LEFT] JOIN [table] t2 ON t1.[someID] = t2.[someID]
WHERE t1.year = 2009 AND t2.year = 2010

someIDでは、必ずしもIDである必要はなく、インデックス付きの列である必要もありませんが、何年にもわたって比較しようとしている列である必要があります。

たとえば、列/フィールドを持つ「Products」というテーブル

  • ID
  • 商品名
  • 価格

あなたができること:

SELECT t1.ProductName, (t2.Price - t1.Price) As Price_change FROM Products t1
  INNER JOIN Products t2 ON t1.ProductName = t2.ProductName
WHERE t1.year = 2009 AND t2.year = 2010

ProductNameが主キーまたはインデックス付き列である場合、これはより高速になります。これは、結合よりもはるかに遅いネストされた選択を使用するよりも高速です(インデックスで結合する場合)。

于 2011-06-23T19:42:23.400 に答える
0

あなたのデータとあなたの望む出力によって、私はあなたが単にこれが欲しいと思います:

select ID, Year, SUM(Revenue)
from YourTable
GROUP BY ID, Year

アップデート

ここで、最初のデータサンプルがすでにSELECTクエリである場合は、次のことを行う必要があります。

select ID, Year, SUM(Revenue)
from (SELECT...) YourSelect
GROUP BY ID, Year
于 2011-06-23T19:42:50.857 に答える
0

これは、ROLLUP コマンドの良い候補のようです。グループ化された列の自動合計が得られます。

GROUP BY ROLLUP (ID,Year)

詳細はこちら。

于 2011-06-23T20:18:23.110 に答える