Выберите оператор, в котором 2 значения имеют количество - PullRequest
1 голос
/ 07 апреля 2019

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

SELECT        TOP (100) PERCENT dbo.[Publication.Person.Include_queue].PMID
FROM            dbo.[Publication.Person.Include_queue] INNER JOIN
                         dbo.ADMIN_Membership ON dbo.[Publication.Person.Include_queue].MemberID = dbo.ADMIN_Membership.MemberID
WHERE        (dbo.[Publication.Person.Include_queue].dbid = 750)
GROUP BY dbo.[Publication.Person.Include_queue].PMID, dbo.ADMIN_Membership.Program_Code
HAVING        (COUNT(*) > 1)
ORDER BY dbo.[Publication.Person.Include_queue].PMID

Мне нужны все PMID для публикаций, число которых превышает 1 с разными кодами Program_code. Я думаю, что мне нужно создать подзапрос, но не уверен, как это сделать со структурой.

Так что мне нужно что-то вроде этого фальшивого псевдокода:

 Select PMID Where PMID.Count > 1 and Program_Code,Count > 1

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

1 Ответ

2 голосов
/ 07 апреля 2019

Возможно, вам следует утверждать, что число различных кодов программ для соответствующего PMID больше единицы:

HAVING COUNT(DISTINCT Program_Code) > 1

Ваш обновленный запрос:

SELECT
    i.PMID
FROM dbo.[Publication.Person.Include_queue] i
INNER JOIN dbo.ADMIN_Membership m
    ON i.MemberID = m.MemberID
WHERE
    i.dbid = 750
GROUP BY
    i.PMID
HAVING
     COUNT(DISTINCT m.Program_Code) > 1
ORDER BY
    i.PMID;

Обратите внимание, что я также ввел таблицу aliases в ваш запрос, что значительно облегчает его чтение.Подумайте об использовании псевдонимов, если вас беспокоит долговечность вашего кода SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...