Sri*_*yer 4 sql oracle oracle11g
我有两个表格,结构如下
表一
????????????????????????????? ? 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
Run Code Online (Sandbox Code Playgroud)
我正在使用上述查询获得ORA-01427.我做错了什么,如何实现结果?
只需使用joins:
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;
Run Code Online (Sandbox Code Playgroud)
如果某些日期table2可能不匹配table1,则使用left join而不是内部联接.