私は本当にこのタスクで立ち往生しています-特定の基準に基づいて「0」の値を持つ行をレポートに入力する必要があります。例を次に示します。
今月とこれまでのすべての月の会社名、取引タイプ、累積金額を含むテーブルBROKERSがあるとします。
COMPANY TRAN_TYPE CURR_MNTH ALL_MNTH
Broker1 CURRENCY_SELL $1000.00 $1500000.00
Broker1 GOLD_SELL $50000.00 $2500000.00
Broker1 GOLD_BUY $80000.00 $8500000.00
Broker1 STOCKS_SELL $35000.00 $3500000.00
テーブルBROKERSにはフィールドTRAN_TYPEがありませんが、すべてのコードが説明されているTRAN_TYPE_CD_EXPLと呼ばれる別のテーブルを参照するフィールドTRAN_TYPE_CDがあります。
TRAN_TYPE_CD TRAN_TYPE_CD_EXPLD
1 STOCKS_SELL
2 STOCKS_BUY
3 GOLD_SELL
4 GOLD_BUY
5 SILVER_SELL
6 SILVER_BUY
7 COPPER_SELL
8 COPPER_BUY
9 CURRENCY_SELL
10 CURRENCY_BUY
したがって、上記の結果は、これら2つのテーブルを単純に結合したものです。
select b.COMPANY, tt.TRAN_TYPE, b.CURR_MONTH, b.ALL_MNTH
from BROKERS b, TRAN_TYPE_CD_EXPL tt
where b.TRAN_TYPE_CD = tt.TRAN_TYPE_CD;
すべてが非常に単純ですが、ここから問題が始まります。私が取り組んでいるレポートは次のようになります。
COMPANY MARKET TRAN_TYPE CURR_MNTH ALL_MNTH
Broker1 FOREX CURRENCY_SELL $1000.00 $1500000.00
Broker1 FOREX CURRENCY_BUY $0.00 $5500000.00
Broker1 CONTRACTS GOLD_SELL $50000.00 $2500000.00
Broker1 CONTRACTS GOLD_BUY $80000.00 $8500000.00
Broker1 STOCKMARKET STOCKS_SELL $35000.00 $3500000.00
Broker1 STOCKMARKET STOCKS_BUY $0.00 $9500000.00
説明させてください:まず、レポートにはMARKET列が含まれている必要があります。これは、TRAN_TYPE列の値に基づいて入力する必要がありますが、データベースにはMARKETテーブルがないため、毎回、レポートまたは他の場所では、次のようにデコードを使用する必要があります(すべての種類のtran_typeがどこに属するかを誰もが知っていると仮定します):
SELECT DECODE (TRAN_TYPE_CD_EXPL.TRAN_TYPE_CD_EXPLD,
'CURRENCY_SELL', 'FOREX',
'CURRENCY_BUY', 'FOREX',
'STOCKS_SELL', 'STOCKMARKET',
'STOCKS_BUY', 'STOCKMARKET') AS MARKET,
またはTRAN_TYPE_CD値に基づく:
SELECT DECODE (BROKERS.TRAN_TYPE_CD,
9, 'FOREX',
10, 'FOREX',
1, 'STOCKMARKET',
2, 'STOCKMARKET') AS MARKET,
2)問題番号2はより複雑です:レポートロジックは次のように述べています-会社が特定のグループに少なくとも1つのトランザクションを持っている場合(たとえば、市場タイプ'FOREX'のCURRENCY_SELL)、レポートには市場タイプの他のtran_typeを入力する必要がありますこの会社が今月中にそれらのトランザクションを持っていなかったとしても、$0のグループ。したがって、この場合、行を入力する必要があります
Broker1 FOREX CURRENCY_BUY $0.00 $5500000.00
と
Broker1 STOCKMARKET STOCKS_BUY $0.00 $9500000.00
これは、UNIXのplsqlバッチを介して実行されるため、単一のクエリである必要があります。
任意のアイデアや提案は非常に高く評価されています!
ありがとう
PS
そのオラクル11gr2、読み取り専用の役割。