SQL初心者です。
よろしくお願いします。
顧客の売上順位を年度別に並べ連番を振りたいのですが
どのようにすれば良いのかわかりません。
<テーブル例>
年度 顧客CD 売上金額 順位
----------------
2002 000001 50000
2002 000002 40000
2002 000003 30000
2002 000004 20000
2003 000001 10000
2003 000002 20000
2003 000003 30000
上記のデータに順位を付与するSQL文を
書こうとしていますがなかなかうまくいきません。
<処理結果例>
年度 顧客CD 売上金額 順位
----------------
2002 000001 50000 1
2002 000002 40000 2
2002 000003 30000 3
2002 000004 20000 4
2003 000001 10000 3
2003 000002 20000 2
2003 000003 30000 1
という結果を求める場合、SQL文をどのように
書けばよいのでしょうか?
お教え下さいませ。
No.3ベストアンサー
- 回答日時:
#1のものです。
PL/SQLを作成してワークテーブルを作成した方が
はやそうですね。
一応サンプルです。
トランザクションは呼び出し形態がわからないので
記述していません。
insertをしているので
複数人が同時にSQLを発行する場合は排他の考慮が
必要です。
declare
cursor cr_tbl is
select distinct 年度 from 対象テーブル order by 年度 ;
rec_tbl cr_tbl%rowtype ;
begin
open cr_tbl ;
loop
fetch cr_tbl into rec_tbl ;
exit when cr_tbl%notfound ;
insert into ワークテーブル
select * from (
select 年度, 顧客CD, 売上金額, rownum 順位
from
(
select 年度, 顧客CD, 売上金額
from 対象テーブル
order by 売上金額
)
where 年度 = rec_tbl.年度
order by 年度, 顧客CD, 売上金額
)
end loop ;
close cr_tbl ;
end ;
potedoraさん 本当にありがとうございます。m(__)m
私、初心者なので処理内容についてはなんとなくしかわかりませんが、サンプルを書いていただいたおかげで、見よう見まねで改造して実行したところ、うまくいきました!
このたびは本当にありがとうございました。
No.1
- 回答日時:
上記の例でいえば、
select * from (
select 年度, 顧客CD, 売上金額, rownum 順位
from
(
select 年度, 顧客CD, 売上金額
from 対象テーブル
order by 売上金額
)
where 年度 = '2002'
order by 年度, 顧客CD, 売上金額
)
union
select * from (
select 年度, 顧客CD, 売上金額, rownum 順位
from
(
select 年度, 顧客CD, 売上金額
from 対象テーブル
order by 売上金額
)
where 年度 = '2003'
order by 年度, 顧客CD, 売上金額
)
order by 1,2
な感じになります。
通常は、UNIONの単位になる部分をVIEW等
にしてすっきりさせます。
また順位を取得するファンクションを作るなんて
方法もあります。またはワークテーブルも有りです。
この回答への補足
ご回答ありがとうございます。
やはり年度を指定しないとダメですか・・
というのは、実際のデータは10年分ありまして、
さらに、顧客順位のsqlができた後には
年度別、商品別の売上順も作らなければならないのです。
ですから、年度を固定値で入れるのではなく全てデータ
から生成したいと考えています。
他にもいろいろなやり方があるとの事なので
ご教授ください。よろしくお願いします。m(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- 中学校 数学の課題でわからなかったので教えていただきたいです。 a.b.c.d.eの飲食店で顧客満足度を調べ 1 2023/02/19 09:53
- 不動産業・賃貸業 不動産の騙しについての質問です。 3 2023/03/03 19:46
- 財務・会計・経理 事業復活支援金の事前確認について 2 2022/04/11 16:07
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- 経営情報システム 前受けと預り金の違いについて 3 2022/04/28 15:10
- 政治 日本で訴訟件数が少ないのは、自民党とビッグモーターが詐欺組織だからですか? 2 2023/07/27 11:30
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- その他(データベース) accessについて 2 2022/05/31 16:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECTで1件のみ取得するには?
-
ACCESSのSQLの書き方
-
oracleのinsert select性能
-
sqlplusの処理が途中でとまる
-
SQL>UPDATEと同時にその件数を...
-
プロシージャで変数をテーブル...
-
ORDER BY 半角カナ
-
Oracleでの文字列連結サイズの上限
-
ファイル書込みで一行もしくは...
-
SQL文で右から1文字だけ削除す...
-
Accessで別テーブルの値をフォ...
-
GROUP BYを行った後に結合した...
-
select insertで複数テーブルか...
-
select句副問い合わせ 値の個...
-
ワードの差込印刷で教えて下さ...
-
GROUP BYを使ったSELECT文の総...
-
access 自動採番 年が変わる...
-
最新の日付とその金額をクエリ...
-
ADO VBA 実行時エラー3021
-
SQLの集計で「全て」の合計も表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECTで1件のみ取得するには?
-
Date型にNULLをセットしたい V...
-
SQL>UPDATEと同時にその件数を...
-
sqlplusの処理が途中でとまる
-
oracleのinsert select性能
-
異なるDB間でのJOINやVIEWについて
-
連番のつけ方
-
ACCESSのSQLの書き方
-
☆☆☆☆SQL Olacle 3つ以上の文字...
-
プロシージャで変数をテーブル...
-
SELECTでの指定行からの指定行...
-
PostgreSQLで小数点以下を処理...
-
[Access]時間帯の重複チェック
-
AccessVBAでリンクテーブルの参...
-
マクロの編集方法を教えて下さい。
-
オラクル オブジェクトのデー...
-
SQL-文字列操作について
-
ORDER BY 半角カナ
-
SQLでのレコード抽出について、...
-
エクセルVBAのオートフィル...
おすすめ情報