【问题标题】:Is there a way to combine two union queries into one single query based on particular conditions?有没有办法根据特定条件将两个联合查询组合成一个查询?
【发布时间】:2016-08-07 12:04:12
【问题描述】:

我有 2 个表格,格式如下

     TableA                             TableB
ID1  Name    Date                    ID1   Status
1    abc   April 2000                1     open
2    xyz   May 2000                  2     closed
3    def   March 2016                3     closed
4    pqr   March 2016                4     open

使用以下查询

SELECT a.id1,
       a.name,
       a.date,
       b.status
FROM TableA a
JOIN TableB b ON a.id1=b.id2
AND b.status='open'
UNION
SELECT a.id1,
       a.name,
       a.date,
       b.status
FROM TableA a
JOIN TableB b ON a.id1=b.id2
AND b.status='closed'
AND a.date>'April 2014'

我得到以下结果集

a.id1  a.name  a.date       b.status
1      abc     April 2000   open
3      def     March 2016   closed
4      pqr     March 2016    open

我的目的是显示给定 ID 的所有打开状态和最近 2 年的关闭状态。 所以我的问题是,我们可以在一个查询中编写这个查询来获得所有打开状态和过去 2 年的关闭状态吗? 请提出建议。

【问题讨论】:

  • 你的日期比较如果有问题,'April 2014'和'March 2016'是字符串,所以字符串比较认为'March' > 'April'。

标签: sql oracle11g oracle-sqldeveloper plsqldeveloper


【解决方案1】:

我将在单个查询中重写您的查询。

select a.id1, a.name, a.date, b.status
  from TableA a
  join TableB b
    on a.id1 = b.id2
 where (b.status = 'closed' and a.date > 'April 2014')
    or b.status = 'open'

【讨论】:

    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 2014-08-04
    • 2018-08-07
    • 2021-11-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多