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。我需要一段时间才能回答这个问题。有人能帮我格式化代码吗?我想不出格式有什么问题。