2016-09-22 4 views
0

У меня есть эта таблицаВыберите все элементы, которые не имеют матч в другой колонке

type  item  yield section 
----------------------------------- 
CT1 | A | 25 | M-2 
CT1 | A | 35 | M-1 
CT2 | A | 70 | M-1 
CT2 | A | 30 | M-2 
CT2 | A | 20 | M-3 
CT1 | B | 40 | M-2 
CT1 | B | 15 | M-1 
CT2 | B | 25 | M-1 
CT2 | B | 25 | M-2 

Сначала мне нужно подвести yield по Item and Type и разделить его на каждый выход в ряд на моем столе. Во-вторых мне нужно знать, какие yield то же самое в costtypcd, item and section (IE type СТ1 itemsection М-1 имеет выход .58 (25 + 35 = 60, то есть 35/60 0,58) и type СТ2 item. section М -1 также имеет выход .58, поэтому я не хочу выбирать этот элемент, потому что это совпадение).

До сих пор у меня есть этот код, который может получить только выход (уже вычисленной, но не могу понять, как выбрать только те items, которые не имеют матч в yield,item and section

select type,item,yield, section 
FROM(
Select type, item, 
     Round(yield/Sum(yield) Over (Partition By type,item),2) As yield,section 
From MyTable 
Order By item 
) 

Так что мой вопрос как я могу получить все элементы, которые только имеют матч в yield, где они имеют то же item,section and different type?

в моей таблице только CT1 A M-1 И CT2 A M-1 является матчем с выходом, так что я хотел бы, чтобы выбрать все остальные пункты.

Ожидаемый результат:

type  item  section 
-------------------------- 
CT1 | A | M-2 
CT2 | A | M-2 
CT2 | A | M-3 
CT1 | B | M-2 
CT1 | B | M-1 
CT2 | B | M-1 
CT2 | B | M-2  

Мне не нужно, чтобы показать выход.

+0

Пожалуйста, покажите ваш точный ожидаемый выход. –

+0

@TimBiegeleisen done –

+0

Ваш образец расчета, похоже, не содержит фактических данных. –

ответ

0
with 
    inputs (type, item, yield, section) as (
     select 'CT1', 'A', 25, 'M-2' from dual union all 
     select 'CT1', 'A', 35, 'M-1' from dual union all 
     select 'CT2', 'A', 70, 'M-1' from dual union all 
     select 'CT2', 'A', 30, 'M-2' from dual union all 
     select 'CT2', 'A', 20, 'M-3' from dual union all 
     select 'CT1', 'B', 40, 'M-2' from dual union all 
     select 'CT1', 'B', 15, 'M-1' from dual union all 
     select 'CT2', 'B', 25, 'M-1' from dual union all 
     select 'CT2', 'B', 25, 'M-2' from dual 
    ), 
    prep (type, item, yield, section, pct) as (
     select type, item, yield, section, 
       yield/sum(yield) over (partition by type, item) 
     from inputs 
    ), 
    final (type, item, yield, section, pct, ct) as (
     select type, item, yield, section, pct, 
       count(distinct type) over (partition by item, section, pct) 
     from prep 
    ) 
select type, item, section 
from final 
where ct = 1 
; 

Выход:

TYPE ITEM SECTION 
---- ---- ------- 
CT2 A M-2 
CT1 A M-2 
CT2 A M-3 
CT1 B M-1 
CT2 B M-1 
CT2 B M-2 
CT1 B M-2 

7 rows selected. 
Смежные вопросы