选择其中两个值具有计数的语句

时间:2019-04-07 13:54:53

标签: sql-server tsql select

我有一个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?,距离很近,但不太远。

1 个答案:

答案 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代码的寿命,请考虑使用别名。