2013-07-08 4 views
0

Интересно, может ли кто-нибудь помочь в предоставлении некоторых рекомендаций относительно того, как я мог бы наиболее эффективно нормализовать следующую таблицу, чтобы я мог создать обновляемый вид/таблицу.Нормализация таблицы в Oracle SQL

Table1:

SYSTEM_KEY | ID | ORDER | ORDER_STATUS | SYSTEM_Actions 
A    1 Pencil Open   Shipped 
B    1 Pencil Open   Tested 
C    1 Pencil Open   Shipped  
A    1 Paper Closed  Delivered 

I'am ищет нормализовать эту таблицу в повторяемый способ что-то вроде этого:

РЕЗУЛЬТАТ:

ID | ORDER | Order Status | A_actions | B_Actions | C_Actions 
1 Pencil OPEN   Shipped  Tested  Delivered     
1 Paper Closed   Delivered null  null 

я смог достичь этого что-то похожее на это

Select full.ID, full.order, full.orderstatus, case when system_ID = 'A' then sysa.system_actions as A_actions, ....{for B, C} 
from table1 full 
left join table1 sysa on full.id = sysa.id and full.order = sysa.order 
left join table1 sysb on full.id = sysb.id and full.order = sysb.order 

Несмотря на то, что это работало, оно было довольно неуклюжим с точки зрения возможности повторного использования нескольких промежуточных столов.

Кто-нибудь знает, могу ли я достичь этого?

+0

посмотреть PIVOT или модели, или SUM (CASE ...). вам нужно сотни примеров только в этом. – haki

+1

Это не нормализация. На самом деле он даже менее нормализован, чем исходная таблица. – APC

+1

Вы предлагаете DENORMALIZE таблицу, добавляя повторяющуюся группу действий. Может быть, вам стоит подумать об этом. Ваше предлагаемое изменение сделает таблицу труднее обработать, приведет к тому, что код будет обрабатывать ее более сложным и подверженным ошибкам, вызовет гнев богов на вашей голове и ваших потомков на семь поколений и, вероятно, вызовет конец мира, как мы его знаем. Удачи. –

ответ

0

попробуйте использовать группу по п

select id,order,order_status, 
     case when system_ID = 'A' then system_actions as A_actions, 
     case when system_ID = 'B' then system_actions as B_actions, 
     case when system_ID = 'C' then system_actions as C_actions 
from table1 
group by id,order,order_status 

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

  • Нет связанных вопросов^_^