通过转换在视图中创建新列

时间:2016-03-24 09:34:38

标签: oracle

我的表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 

1 个答案:

答案 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 …….