【问题标题】:Not sure how to accomplish this with SQL不知道如何用 SQL 完成这个
【发布时间】:2019-07-15 16:58:38
【问题描述】:

我有一个查询,我正在运行以消除两个学期内的重复项。不幸的是,我必须将 chpid、secno、lname、fname 和 email 结合起来,以使记录具有唯一性以进行比较。

该查询为我要完成的工作提供了一个起点。

SELECT DISTINCT 
    '1' as Counter
    chpid,
    SECNO,
    LNAME,
    FNAME,
    EmailAddress
FROM 
    Eligmember
WHERE 
    ((FORMYEAR = 2018 AND FORMSEMESTER = 4) OR 
     (FORMYEAR = 2019 AND FORMSEMESTER = 2)) 
    AND presentmem <> 'Y'

返回 58000 条记录

Counter chpid SECNO    LNAME     FNAME          EmailAddress
---------------------------------------------------------------
1       1     2        Banes     Moore          MMB@test.test
1       1     2        Baron     Lana           LRB@test.org

这很好,但我想做的是计算每个 chpid 中有多少个。我只需要每个 chpid 中每个人的计数,但我必须选择 chpid、secno、lname、fname 和电子邮件以使它们独一无二。

有什么建议吗?

【问题讨论】:

  • 使用COUNT(*) OVER(PARTITION BY chpid)

标签: sql sql-server tsql


【解决方案1】:

很遗憾,SQL Server 不支持 count(distinct) 与多个表达式。一种方法是子查询:

SELECT chpid, COUNT(*)
FROM (SELECT DISTINCT chpid, SECNO, LNAME, FNAME, EmailAddress
      FROM Eligmember
      WHERE ((FORMYEAR = 2018 and FORMSEMESTER = 4) OR
             (FORMYEAR = 2019 and FORMSEMESTER = 2)
            ) and
            presentmem <> 'Y'
     ) c
GROUP BY chpid;

【讨论】:

    【解决方案2】:

    这是一个简单的 GROUP BY 场景:

    SELECT 
        Count(*) as Counter
        ,chpid
        ,max(SECNO) as SECNO
        ,LNAME
        ,FNAME
        ,max(EmailAddress) as EmailAddress
    FROM 
        Eligmember
    WHERE 
        ((FORMYEAR = 2018 AND FORMSEMESTER = 4) OR 
         (FORMYEAR = 2019 AND FORMSEMESTER = 2)) 
        AND presentmem <> 'Y'
    GROUP BY 
        chpid
        ,LNAME  -- for each person within the chpid
        ,FNAME  -- ^
    ;
    

    这“将 [s] chpid、secno、lname、fname 和电子邮件组合在一起,以使记录具有唯一性以进行比较。”它还生成所需的结果集。这假设 fname、lname 和电子邮件地址之间存在 1:1 的关系;如果不是,那么您需要删除电子邮件地址的最大值和组。

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      相关资源
      最近更新 更多