【问题标题】:Select Statement where 2 values have Counts选择 2 个值具有计数的语句
【发布时间】:2019-04-07 13:54:53
【问题描述】:

我有一个 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?,它很接近但不完全。

【问题讨论】:

    标签: sql-server tsql select


    【解决方案1】:

    也许您应该断言匹配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;
    

    请注意,我还在您的查询中引入了表 别名,这使它更易于阅读。如果您担心 SQL 代码的寿命,请考虑使用别名。

    【讨论】:

    • 谢谢——我完全同意使用别名。对不起,草率的例子
    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多