1

私は2つのテーブルt1(id,send_date,volume)とを持っていt2(send_date,rate)ます。これらの2つのテーブルを結合し、両方の日付が一致するときにt2からレートを取得する必要があります。

select t1.id, t1.volume * t2.rate 
from t1, t2 
where t1.send_date = t2.send_date

ここで、私の要件は、テーブルt2にt1の日付と一致する日付がなく、t1の日付がSUNDAYの場合、次の月曜日のレートを取得する必要があるということです。

たとえば、2013年2月10日がt2にない場合は、t1の2月10日に11番目の2月のレートを使用する必要があります。

よろしく、

サシ

4

1 に答える 1

0

以下は私の質問とあなたの答えです:

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 の例を次に示します

于 2013-03-18T19:06:24.697 に答える