фильтровать несколько строк на основе одного значения - PullRequest
0 голосов
/ 25 января 2019

в моем BO

У меня есть таблица с:

OrderID | order Number | reason code 
123     | a            | r2
123     | b            | r1
123     | c            | r3
124     |d             | r3

Я использую один и тот же источник для 2 листов, и на одном мне нужны все OrderID, где у меня есть причина R2 по крайней мере для одной строки

а по другому все остальное поэтому надо иметь только:

OrderID | order Number | reason code 
123     | a            | r2
123     | b            | r1
123     | c            | r3

и второй лист должен иметь только:

OrderID | order Number | reason code 
124     |d             | r3

Я могу добавить, что номера заказов уникальны, поэтому не могут иметь 2 одинаковых номера в разных заказах ... если это имеет какое-либо значение .??

1 Ответ

0 голосов
/ 07 марта 2019

Как то так?

1-й лист -

;with test_data(order_id, order_number, reason_code) as (
    select 123, 'a', 'r2' union all
    select 123, 'b', 'r1' union all
    select 123, 'c', 'r3' union all
    select 124, 'd', 'r3' 
)
--
-- Test data above; Desired query below
--
select *
from test_data a
where exists (
    select 1 from test_data b
    where   a.order_id = b.order_id
            and b.reason_code = 'r2'
)

Выход:

   123   a  r2
   123   b  r1
   123   c  r3

2-й лист -

;with test_data(order_id, order_number, reason_code) as (
    select 123, 'a', 'r2' union all
    select 123, 'b', 'r1' union all
    select 123, 'c', 'r3' union all
    select 124, 'd', 'r3' 
)
--
-- Test data above; Desired query below
--
select *
from test_data a
where NOT exists (
    select 1 from test_data b
    where   a.order_id = b.order_id
            and b.reason_code = 'r2'
)  

Выход:

124  d  r3

Надеюсь, это поможет. Пожалуйста, вернитесь.

...