我有两张表格,结构如下
表一
╔════╦═══════════╦═══════╦══╗ ║ ID ║ Date ║ value ║ ║ ╠════╬═══════════╬═══════╬══╣ ║ 1 ║ 1/1/2015 ║ 234 ║ ║ ║ 2 ║ 1/20/2015 ║ 267 ║ ║ ║ 3 ║ 1/25/2015 ║ 270 ║ ║ ╚════╩═══════════╩═══════╩══╝
第二张表
╔════════════╦═══════════╗ ║ start_date ║ end date ║ ╠════════════╬═══════════╣ ║ 1/1/2015 ║ 1/20/2015 ║ ║ 1/20/2015 ║ 1/25/2015 ║ ╚════════════╩═══════════╝
我的输出必须是
╔════════════╦═══════════╦════════════╗ ║ start_date ║ end date ║ difference ║ ╠════════════╬═══════════╬════════════╣ ║ 1/1/2015 ║ 1/20/2015 ║ 33 ║ ║ 1/20/2015 ║ 1/25/2015 ║ 3 ║ ╚════════════╩═══════════╩════════════╝
所以这里我必须根据日期将第二个表连接到第一个表,然后计算列中两个值(对应于日期)之间的差异,然后在一个sql查询中显示它。
问题是我无法在一个查询中加入所有这些并将它们一起显示。
这就是我的目标
select start_date, end_date, ((SELECT
table_one.value
FROM
table_one,
table_two
WHERE
table_one.date= table_two.end_date(+)
) - (
SELECT
table_one.value
FROM
table_one,
table_two
WHERE
table_one.date = table_two.start_date(+)
))from table_two,table_one where table_two.start_date(+)=table_one.date
我正在使用上述查询获得ORA-01427。我做错了什么,如何实现结果呢?
答案 0 :(得分:6)
只需使用join
s:
select t2.start_date, t2.end_date, (t1e.value - t1s.value) as difference
from table2 t2 join
table1 t1s
on t2.start_date = t1s.date join
table1 t1e
on t2.end_date = t1e.date;
如果table2
中的某些日期可能与table1
不匹配,请使用left join
代替内部联接。