2015-03-02 4 views
-4

Я хочу дать условие в SQL Developer следующим образом:Если еще в Sql Developer

  1. Я хочу выбрать некоторые данные, в которых статус будет «A», «B», «C» для конкретного CustomerID. CustomerID не является первичным ключом.
  2. Если CutomerId имеет статус «A», то в следующей строке, если тот же CustomerId имеет статус «B», тогда я хочу выбрать этот CustomerID.

База данных:

Srno (номер, первичный ключ), CustomerID (номер), статус (VARCHAR)

Образец данных:

Srno   CustomerId  Status 

1   001    A 

2   001    B 

3   002    A 

4   002    C 

В описанном выше случае, я хочу выберите CustomerID 001, потому что данное условие истинно.

+1

Можете привести текущую инструкцию SQL? Или это PL/SQL? –

+0

Простите, Патрик, я понятия не имею об этом запросе sql. Поэтому у меня нет никаких данных для вас. –

+0

выглядит так, как будто вам нужна аналитическая функция, но если вы не дадите нам никаких данных, мы не сможем вам помочь. – Aramillo

ответ

4

Термин «следующая строка» не имеет смысла в SQL, если вы не предоставили некоторый порядок. Если вы имеете в виду что-то вроде: «Я хочу, чтобы выбрать клиентов, которые имеют как статус А и состояние B», это может быть сделано как

select 
    a.customerid 
from 
    (select * from customer where status = 'A') a, 
    (select * from customer where status = 'B') b 
where 
    a.customerid = b.customerid 

Если вы имеете в виду это должно быть на самом деле рядом (по заказу srno, например), это можно сделать, скажем, с помощью аналитической функции LAG. Что-то вроде

select customerid 
from (
    select 
    customerid, 
    status, 
    lag (status) over (partition by customerid order by srno) prev_status 
    from customer) c 
where c.status = 'B' and c.prev_status = 'A' 
+0

Это точный ответ, который я хотел. Извините за неясность при размещении вопроса. –