我的表tab1
中有这样的数据:
int_ref ant_ref counter type23 pol_ref pol_flag sale share prof
cse_123 cse_237 abc_123 as NC 375361.4 34 374037.4
cse_124 cse_237 abc_123 as cos_345 C 65760.86 54 64436.86
cse_124 cse_237 abc_123 as cos_345 C 14250 34 12926
cse_124 cse_237 abc_123 as NC 44099.79 22 42775.79
cse_435 cse_456 abc_123 as NC 20000 13 18676
cse_237 abc_123 of NC 497096.8 57 495772.8
cse_456 abc_123 of cos_235 C 8760.79 12 7436.79
cse_456 abc_123 of NC 1000000 71 998676
cse_263 abc_123 of NC 7000 23 5676
cse_544 abc_123 of cos_423 C 3424 32 44533
我在这个表上构建了5个视图。
第一个视图(view1)用于提取和转换所需格式的数据,以便在其他视图中使用。
第二个视图(view2)是来自第一个视图的FL值和第一个视图的分组的透视图。
第3,第4,第5个视图(view3 / view4 / view5)是使用第二个视图中数据的辅助视图。
现在我想在第一个视图(view1)中创建'new column'标志。
对于同一int_ref
值,其中pol_flag
同时具有('C'和'NC')或仅'C',则'新列'应显示为'T',否则为'F'
不允许使用group by,sum或任何其他窗口函数等。
我的view1
就像(约3000行):
CREATE OR REPLACE FORCE VIEW VIEW1 AS
Select
Col1,
fl,
number of case statements,
,,,,,,,,,,
New_column(required with the flag)
From tab1
Join tabxyz ...
view1
的输出:
int_ref counter pol_flag sale Fl new_column
cse_123 abc_123 NC 475757584 R510 F
cse_124 abc_123 C 477478 R530 T
cse_124 abc_123 C 75678489 R530 T
cse_124 abc_123 NC 9867589 R520 T
cse_435 abc_123 NC 86548 R530 F
cse_237 abc_123 NC 8367444 R540 F
cse_456 abc_123 C 8760.79 R550 T
cse_456 abc_123 NC 46547 R560 T
答案 0 :(得分:1)
您可以使用分析函数和案例陈述轻松完成此操作:
CREATE OR REPLACE FORCE VIEW VIEW1 AS
Select
Col1,
fl,
number of case statements,
...
case when max(case when pol_flag = 'C' then 'C') over (partition by int_ref) = 'C' then 'T' else 'F' end new_column
From tab1
Joins tabxyz …….