簡體   English   中英

從多個表中選擇超出范圍的日期,列名和時間戳

[英]Selecting an out-of-range date, column name, and timestamp from multiple tables

我有多個表(10+),其中我試圖將任何日期拉到指定日期范圍之外,列名(包含超出范圍的日期)和該日期行的MODIFIED_BY。 以下是兩個示例表和所需的輸出。 我在表A中檢查的日期范圍是生日,大於1990年。在表B中,有效日期是在2017年以上

TABLE_A

|---------------------|------------------|------------------|
|      ACCT_ID        |    BIRTHDATE     |    MODIFIED_BY   |
|---------------------|------------------|------------------|
|          12         |     04-MAR-96    |     user1234     |
|---------------------|------------------|------------------|
|          13         |     10-MAY-79    |     user9999     |
|---------------------|------------------|------------------|

TABLE_B

|---------------------|------------------|------------------|
|      ACCT_ID        |   EFFECTIVE_DT   |    MODIFIED_BY   |
|---------------------|------------------|------------------|
|          12         |     01-JAN-15    |     user9876     |
|---------------------|------------------|------------------|
|          13         |     01-APR-17    |     user1111     |
|---------------------|------------------|------------------|

輸出值

|---------------------|------------------|------------------|
|      ACCT_ID        |     BAD_DATE     |    MODIFIED_BY   |
|---------------------|------------------|------------------|
|          12         |     04-MAR-96    |     user1234     |
|---------------------|------------------|------------------|
|          13         |     01-APR-17    |     user1111     |
|---------------------|------------------|------------------|

我不是在這種情況下尋找SQL代碼,而是尋求解決方案。 我可能可以使用UNION完成此操作,但是由於並非所有聯接都位於acct_id上,因此對許多表進行操作時可能會很乏味且緩慢。 我能夠使用兩列來完成此操作,一列是帳戶ID,另一列是BAD_DATE,在其中我將列名和Modifyed_by附加到案例返回中。

任何幫助表示贊賞。

謝謝!

我不知道如何在不使用那些表的情況下做到這一點。 也許是一件乏味的工作,但嘿-您只會做一次。 這是一個例子:

SQL> create table table_a (acct_id number, birthdate date, modified_by varchar2(20));

Table created.

SQL> create table table_b (some_id number, effective_dt date, username varchar2(20));

Table created.

SQL> insert all
  2    into table_a values (12, date '1996-03-04', 'user1234')
  3    into table_a values (13, date '1979-05-10', 'user9999')
  4    into table_b values (12, date '2015-01-01', 'user9876')
  5    into table_b values (12, date '2017-04-01', 'user1111')
  6  select * From dual;

4 rows created.

SQL> create or replace view wc as
  2  select 'table_a' source, acct_id id, birthdate bad_date, modified_by from table_a union all
  3  select 'table_b' source, some_id, effective_dt, username from table_b;

View created.

SQL>
SQL> select *
  2  from wc
  3  where (source = 'table_a' and bad_date > date '1990-01-01')
  4     or (source = 'table_b' and bad_date > date '2017-01-01');

SOURCE          ID BAD_DATE   MODIFIED_BY
------- ---------- ---------- --------------------
table_a         12 04.03.1996 user1234
table_b         12 01.04.2017 user1111

SQL>

找到了解決方案!

我正在使用一個案例聲明來確定不良日期。 如果我添加了另外兩個具有相同條件的case語句,但其中一個返回列名的字符串,而另一個返回Modifyed_by ID,則它起作用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM