oracle:如何处理join不使用的场景';t火柴
我有两个表oracle:如何处理join不使用的场景';t火柴,join,Join,我有两个表t1(id,发送日期,卷)和t2(发送日期,速率)。我需要连接这两个表,当两个日期都匹配时,从t2获取速率 select t1.id, t1.volume * t2.rate from t1, t2 where t1.send_date = t2.send_date 现在,我的要求是,当表t2中没有与t1中的日期匹配的日期,并且如果t1中的日期是星期日,那么我需要得到下一个星期一的费率 例如:如果2013年2月10日不在t2,则t1中的2月10日应使用2月11日费率 问候, Sa
t1(id,发送日期,卷)
和t2(发送日期,速率)
。我需要连接这两个表,当两个日期都匹配时,从t2获取速率
select t1.id, t1.volume * t2.rate
from t1, t2
where t1.send_date = t2.send_date
现在,我的要求是,当表t2中没有与t1中的日期匹配的日期,并且如果t1中的日期是星期日,那么我需要得到下一个星期一的费率
例如:如果2013年2月10日不在t2,则t1中的2月10日应使用2月11日费率
问候,
Sasi以下是我的问题和你的答案:
SELECT * -- Select all or any column that you want.
FROM t2 JOIN (
SELECT id
, CASE
WHEN TO_CHAR(send_date, 'DAY')
= TO_CHAR(TO_DATE('03-MAR-2013'), 'DAY')
-- The above condition returns true if send_date is a sunday
-- as '03-MAR-2013' is a sunday.
AND (SELECT COUNT(*)
FROM t2
WHERE t2.send_date = t1.send_date) = 0
-- This condition checks if any matching row exists
-- in t2 for the send_date.
THEN send_date + 1 -- Increments the day by 1 to fetch
-- the rates for a monday.
Else send_date -- Leaves the send_date as it is for a normal date.
END AS send_date
, volume
FROM t1
) USING (send_date) -- You can also use ON keyword to perform the join.
;
SQLFiddle示例仅供参考。您能否提及您正在使用的RDBMS?SQL server?甲骨文?谢谢你的回复…这是一个很难回答的问题。我已经为此做了+1。我需要一段时间才能回答这个问题。有人能帮我格式化代码吗?我想不出格式有什么问题。