昨日、同じコードで同様の質問を投稿しました。書き直したところ、新しい仕様に完全に適合するはずですが、何らかの理由で機能していません。
Oracle 10g Express を使用しています。
以下のコードは、収入の上位 10% の事務弁護士を計算しています。
CREATE VIEW rich_solicitors AS
select notes.time_spent*rate.rate_amnt+coalesce(special_rate.s_rate_amnt,0)
AS solicitor_made, notes.solicitor_id
FROM notes, rate, solicitor_rate, solicitor, case, contract, special_rate
WHERE notes.solicitor_id = solicitor.solicitor_id
AND solicitor.solicitor_id = solicitor_rate.solicitor_id
AND solicitor_rate.rate_id = rate.rate_id
AND notes.case_id = case.case_id
AND case.contract_id = contract.contract_id
AND contract.contract_id = special_rate.contract_id (+)
ORDER BY -solicitor_made;
SELECT * FROM rich_solicitors
WHERE ROWNUM <= (SELECT COUNT(*)/10 FROM rich_solicitors);
昨年の上位 10% を計算する必要があります。SELECT に start_date と expiry_date を追加し、次の WHERE 関数を追加するのと同じくらい簡単だと思いました。
AND contract.start_date >= 01-01-10
AND contract.expiry_date <= 01-01-11
TO_DATEを使用して正確に日付を挿入しています。私の講師は、なぜこれがうまくいかないのかを考え出すのにかなりの時間を費やしましたが、役に立ちませんでした.
エラーを返し続けました - ORA-00932: inconsistent datatypes: expected CHAR got NUMBER
日付形式も定義しようとしましたが、それでも同じエラーが返されました
CREATE VIEW rich_solicitors1 AS
SELECT notes.time_spent*rate.rate_amnt+coalesce(special_rate.s_rate_amnt,0) AS solicitor_made, notes.solicitor_id, TO_CHAR(contract.start_date, 'DD-MM-YY'), TO_CHAR(contract.expiry_date, 'DD-MM-YY')
FROM notes, rate, solicitor_rate, solicitor, case, contract, special_rate
WHERE notes.solicitor_id = solicitor.solicitor_id
AND solicitor.solicitor_id = solicitor_rate.solicitor_id
AND solicitor_rate.rate_id = rate.rate_id
AND notes.case_id = case.case_id
AND case.contract_id = contract.contract_id
AND contract.contract_id = special_rate.contract_id (+)
AND contract.start_date >= 01-01-10
AND contract.expiry_date <= 01-01-11
ORDER BY -solicitor_made;
何か案は?
多くの感謝、批判は大歓迎です。私は学生であり、これを最初のステップとして、約 9 日前まで SQL の知識がまったくありませんでした。