在insert-select块中使用if-else条件

时间:2015-06-17 12:15:49

标签: oracle plsql case insert-select

我有两个表elig(mID,startDate,endDate)和claim(mID,serviceDate)。我必须检查serviceDate是否在startDate和endDate之间,并插入新表hasClaim(mID,startDate,endDate,Flag)。该标志将被设置为' Y'如果满足的条件和' N'除此以外。 我所做的是:

INSERT INTO hasClaim (mID, startDate, endDate, has_claim)  
SELECT e.mID, e.startDate, e.endDate, 'Y' 
FROM elig e 
inner JOIN claim c 
ON e.mID=c.mID 
WHERE c.serviceDate BETWEEN e.startDate AND e.endDate

但是这只返回那些serviceDate位于startDate和endDate之间且标志设置为' Y'的值。如何检索其他值并将标志设置为' N'? 我正在使用oracle。

1 个答案:

答案 0 :(得分:2)

尝试:

INSERT INTO hasClaim (mID, startDate, endDate, has_claim)  
SELECT e.mID, 
       e.startDate, 
       e.endDate, 
       CASE 
          WHEN c.serviceDate BETWEEN e.startDate AND e.endDate
          THEN 'Y'
          ELSE 'N'
       END AS has_claim
FROM elig e 
inner JOIN claim c 
ON e.mID=c.mID;

这使用searched case语句(来自10g文档,但在11g中是相同的)。