Oracleで以下のようなことを実現させたいです。
TESTテーブル
No | 列1 | 列2 | 列3 |
---|---|---|---|
1 | 20220200 | 12345 | 100 |
2 | 20220201 | 12345 | 150 |
3 | 20220202 | 12345 | 10 |
主キーは列1と列2。
No1の列3データの100をNo2の列3の150に足した結果を表示させたいです。
条件は
①列2の項目値が同じこと(12345=12345)
②列1の下二けたが00の列3データを列1の下二けたが01の列3データに加算したいです。
単純に10を足すなどは理解しているのですが
レコードの項目を足すことができません。
よろしくお願いいたします。
SQLではUPDATEを使いますが、PRIMARY KEYは列1でしょうか?
質問は修正できますから、この掲示板ではテーブル定義はCREATE TABLEで、データはINSERTに、Markdownの[コード]を使って提示してください。
https://teratail.com/help/question-tips#questionTips37
CREATE TABLE、INSERTの書き方の参考に。都道府県テーブル
https://qiita.com/Papageno/items/bbc5597e5f7c9bb2421f
テーブル設計の基本ですが、1つの列には1つの意味しか持たせません。
>②列1の下二けたが00の列3データを列1の下二けたが01の列3データに加算したいです。
文字型の列であればSUBSTRで文字列の一部を取得できますが、オプティマイザはテーブル全件に対して 下二けたSUBSTRした結果が '00' と等しいか?って判断するので、その列にインデックスが設定してあってもインデックスは使われないので、データが増えるに従って極端にパフォーマンスが悪くなります。今のテーブル設計で押し通したら後悔するでしょう。
SUBSTRしなければならないなら、最初から別々の列に分けます。
質問は修正できます。
>単純に10を足すなどは理解しているのですが
>レコードの項目を足すことができません。
今まで書いたSQLを質問に追記しては?
列2、列1の順に並べ替えて1行目後を加算するってこどであれば
「グループ単位に、検索したレコードのn行後のデータを取得する( LEAD )」
http://oracle.se-free.com/dml/0601_lead.html
が使えそうですね。
あなたの回答
tips
プレビュー