我有多个表(10+),其中我试图提取指定日期范围之外的任何日期,列名称(保存超出范围的日期),以及该日期的MODIFIED_BY'排。下面是两个示例表和所需的输出。 我在表A中检查的日期范围是大于1990年的生日。在表B中,生效日期大于2017
TABLE_A
dd
表-B
library(ggplot2)
ggplot(dd, aes(x = Dep, y = IND1, fill = (IND1 > 0))) +
geom_col() +
scale_fill_manual(value = c("purple", "blue")) +
coord_flip()
输出
|---------------------|------------------|------------------|
| ACCT_ID | BIRTHDATE | MODIFIED_BY |
|---------------------|------------------|------------------|
| 12 | 04-MAR-96 | user1234 |
|---------------------|------------------|------------------|
| 13 | 10-MAY-79 | user9999 |
|---------------------|------------------|------------------|
我不是在这个例子中寻找SQL代码,而是一个解决方案。我可以使用UNION完成此操作,但由于并非所有联接都在acct_id上,因此在为许多表执行此操作时可能会很乏味且很慢。我能够使用两个列完成此操作,一个是帐户ID,另一个是BAD_DATE,其中我将列名称和modified_by附加到案例返回。
感谢任何帮助。
谢谢!
答案 0 :(得分:0)
如果没有UNIONing那些表,我不知道怎么做;可能是一项繁琐的工作,但是嘿 - 你只会做一次。这是一个例子:
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>
答案 1 :(得分:0)
找到解决方案!
我正在使用案例陈述来确定糟糕的日期。如果我添加两个具有相同条件的附加case语句,而是一个返回一个列名字符串而另一个返回modified_by ID,那么它可以工作!