我有一个Select语句,该语句按具有多个条目的ID提取所有发布。我正在寻找具有多个条目的项目,因此我可以确定与作者一起从事同一程序/部门还是另一项。我对单身作者不感兴趣。这给了我所有用同一程序编写的出版物。
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
我需要的是具有不同Program_code的计数大于1的出版物的所有PMID。我想我需要创建一个子查询,但不确定如何用结构来实现。
所以我认为这是需要的伪造伪代码:
Select PMID Where PMID.Count > 1 and Program_Code,Count > 1
我看着How to get multiple counts with one SQL query?,距离很近,但不太远。
答案 0 :(得分:2)
也许您应该断言匹配PMID
的程序代码的 distinct 个计数大于一个:
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代码的寿命,请考虑使用别名。