【问题标题】:Using if-else condition inside a insert-select block在插入选择块内使用 if-else 条件
【发布时间】:2015-06-17 12:15:49
【问题描述】:

我有两个表 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。

【问题讨论】:

    标签: oracle plsql case insert-select


    【解决方案1】:

    试试:

    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 中是相同的)。

    【讨论】:

    • 完美运行。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2013-09-26
    • 2016-10-05
    • 2019-04-25
    • 1970-01-01
    • 2017-02-07
    • 2015-06-27
    相关资源
    最近更新 更多