Получить записи из таблицы, которые точно соответствуют 1 столбцу - PullRequest
0 голосов
/ 30 августа 2018

У меня есть таблица сведений о соглашении, где у меня есть ID соглашения. Идентификатор соглашения может повторяться на основе других значений. Как я могу получить только те строки, в которых есть только 1 AgreementID? Ниже приведен запрос, который я использую, но не возвращаю желаемый результат.

select AGREEMENT_ID  from Agreement_Detail
GROUP BY  AGREEMENT_ID  Having COUNT(*) = 1 

Я что-то упустил?

Пример данных:

Если соглашение_ID равно 1, в таблице подробностей его можно повторить как

Agreement_ID    Pid
1               2
1               3
1               4

Кроме того, в качестве значения 2 можно указать Agreement_ID следующим образом:

Agreement_ID    Pid
2               2

Я хочу получить 2 в качестве результата.

Ответы [ 5 ]

0 голосов
/ 30 августа 2018

Один из возможных способов:

select Agreement_ID, Pid from (
    select Agreement_ID, Pid, count(*) over(partition by Agreement_ID) as cnt from Agreement_Detail
) t
where cnt = 1
0 голосов
/ 30 августа 2018

Это то, что вам нужно: Вам нужно COUNT Pid для каждого AGREEMENT_ID

SELECT tab1.*
FROM Agreement_Detail tab1 JOIN 
   (
    select AGREEMENT_ID, count(PID) As PID
    from Agreement_Detail
    GROUP BY  AGREEMENT_ID 
    having count(PID) = 1
   ) tab2 
ON tab1.AGREEMENT_ID = tab2.AGREEMENT_ID
0 голосов
/ 30 августа 2018

Попробуйте запрос ниже:

select pid, count(AGREEMENT_ID)
group by pid
having count(AGREEMENT_ID)>1
0 голосов
/ 30 августа 2018

В своем коде вместо group by для идентификатора СОГЛАШЕНИЯ введите group by для PID и укажите в качестве условия having count(Agreement Id) >1

0 голосов
/ 30 августа 2018

Вы, кажется, хотите not exists:

select ad.*
from Agreement_Detail ad
where not exists (select 1 
                  from Agreement_Detail ad1 
                  where ad1.AGREEMENT_ID = ad.AGREEMENT_ID and ad1.Pid <> ad.Pid
                 );

Однако вы также можете использовать GROUP BY:

select AGREEMENT_ID
from Agreement_Detail ad
group by AGREEMENT_ID
having min(pid) = max(pid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...