2016-03-24 2 views
0

У меня есть данные, как это в моей таблице 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 просмотров, которые построены по этой таблице.

  • 1-й вид (view1) предназначен для извлечения и преобразования данных в требуемом формате для использования в других представлениях.

  • 2-й вид (view2) является невольным значением FL из первого вида и группы по 1-му виду.

  • 3-й, 4-й, 5-й виды (view3/view4/view5) являются вторичными видами, которые используют данные со второго представления.

Теперь я ищу, чтобы создать флаг «новый столбец» в моем первом представлении (view1).

Для такого же int_ref значение, в котором pol_flag имеет (C и NC), или просто 'C', тогда 'новый столбец' должен отображаться как 'T', в противном случае 'F'.

Запрещена никакая группа, сумма или любая другая функция окна и т. Д.

Мой 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

Почему ограничение на «группировать по сумме, сумме или любой другой функции окна»? Похоже, вы могли бы сделать то, что вам нужно, с помощью нескольких аналитических функций. Кроме того, это MySQL или Oracle? Вы упоминаете Oracle в заголовке своего сообщения, но вы отметили оба. Который из них? – Boneist

+0

@Boneist Привет, это Oracle. Я не могу использовать их как то, как создается представление, и у него слишком много преобразований. – SAIar

ответ

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 ……. 
+0

Спасибо @Boneist ... Я использовал аналитическую функцию подсчета для этого ... случая, когда count (отдельный pol_flag) over (partition by int_ref)> 1, затем 'T' else 'F' end as new_column – SAIar

Смежные вопросы