mysql - SQL 查询中的复杂计算

标签 mysql sql oracle oracle-xe ora-00932

我昨天用相同的代码发布了一个类似的问题,我已经重写了,它应该对新规范来说是完美的,但由于某种原因它不起作用。

我正在使用 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%,我认为这就像将 start_date 和 expiry_date 添加到 SELECT 并添加以下 WHERE 函数一样简单:

AND contract.start_date >= 01-01-10
AND contract.expiry_date <= 01-01-11

我已经使用 TO_DATE 正确地插入了日期。我的讲师花了一个小时和我一起研究为什么这行不通但无济于事。

它一直返回错误 - ORA-00932:不一致的数据类型:预期的 CHAR 得到了 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 知识。

最佳答案

你能试试我用 NVL 函数替换了你的 coalesce

SELECT  notes.time_spent*rate.rate_amnt+NVL(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 >= to_date('01-01-10','MM-DD-YY')
AND contract.expiry_date <= to_date('01-01-11' ,'MM-DD-YY')
ORDER BY solicitor_made

关于mysql - SQL 查询中的复杂计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5186543/

相关文章:

mysql - 没有 where 子句的连接查询

sql - 参数化查询 Visual Basic

sql - 关于sql中的日期

linux - 如何在 redhat linux 中创建新的数据库实例

sql - 将不在聚合函数中的列保留在 group by 语句中

php - Codeigniter 显示错误 : mysql_real_escape_string() expects parameter 2 to be resource, bool 值给定

mysql - Munin MySQL插件的未知图形错误

mysql - ruby 和 mysql gem 不兼容

sql - 如何创建一个 CHECK 约束,允许用户从今天起只输入 DateTime?

mysql查询这么慢