【问题标题】:Resolving duplicates in 1 to many relationship in SQL Server在 SQL Server 中解决一对多关系中的重复项
【发布时间】:2015-01-16 00:28:05
【问题描述】:

我有一个表格,其中包含如下数据:

case_id    person_id     provider_group_ID       PROVIDER_GROUP_FUNCTION   case_date
 12421      1111             SLS_D2                  BPSC_Service          2014-10-07
 12422      1111             SLS_D2                  BPSC Service          2014-10-07
 12423      1111             SLS_D2                  BPSC Service          2014-10-07

我还有另一个名为 TeleComData 的表,例如:

PersonID   provider_group_id                    provider_group_function     case_date    NUM_CALLS
1111         SLS_D2                                  BPSC_Service           2014-10-07     8
1111         BPSC                                    BPSC_Service           2014-10-07     0

我想要的是

CaseCount  PROVIDER_GROUP_ID       PROVIDER_GROUP_FUNCTION            case_date    num_calls
  3              SLS_D2                  BPSC_Service                  2014-10-07    8
  0              BPSC                    BPSC_Service                  2014-10-07    0

但截至目前,我得到以下信息

 CaseCount  PROVIDER_GROUP_ID       PROVIDER_GROUP_FUNCTION            case_date    num_calls
      3              SLS_D2                  BPSC_Service                  2014-10-07    8
      3              BPSC                    BPSC_Service                  2014-10-07    0

我在两个表之间进行了左外连接,而不是根据特定的 PROVIDER_GROUP_ID 计算案例,而是复制它。 我似乎无法弄清楚我的代码发生了什么。这是我目前得到的部分:

SELECT COUNT(DISTINCT CASE_ID)  FROM 
      dbo.DW_TELECOM_DATA B 
      LEFT OUTER JOIN Clear.T_CLEAR_SERVICE A ON 
      A.Case_date = B.Case_date
      AND A.PERSON_ID = B.PERSON_ID

【问题讨论】:

  • 您可能只需要在 JOIN 中添加 AND A.provider_group_id = B.provider_group_id
  • 如果我这样做,我不会得到结果集中的第二行(casecount 为 0)

标签: sql-server tsql count distinct one-to-many


【解决方案1】:

试试这个。在您的Left Outer Join 中再添加一个ONcondition

CREATE TABLE #e
  (
     case_id                 INT,
     person_id               INT,
     provider_group_ID       VARCHAR(100),
     PROVIDER_GROUP_FUNCTION VARCHAR(100),
     case_date               DATE
  )

INSERT #e
VALUES (12421,1111,'SLS_D2','BPSC_Service','2014-10-07'),
       (12422,1111,'SLS_D2','BPSC Service','2014-10-07'),
       (12423,1111,'SLS_D2','BPSC Service','2014-10-07')

CREATE TABLE #f
  (
     PersonID                INT,
     provider_group_ID       VARCHAR(100),
     PROVIDER_GROUP_FUNCTION VARCHAR(100),
     case_date               DATE,
     NUM_CALLS               INT
  )

INSERT #f
VALUES (1111,'SLS_D2','BPSC_Service','2014-10-07',8),
       (1111,'BPSC','PSC_Service','2014-10-07',0) 



SELECT COUNT(CASE_ID) CaseCount, b.provider_group_ID,  b.PROVIDER_GROUP_FUNCTION,  
       b.case_date,b.NUM_CALLS
FROM   #f B
       LEFT OUTER JOIN #e A
                    ON A.CASE_DATE = B.CASE_DATE
                       AND A.PERSON_ID = B.PERSONID
                       AND A.PROVIDER_GROUP_ID = B.PROVIDER_GROUP_ID 
                       group by b.provider_group_ID,  
                                b.PROVIDER_GROUP_FUNCTION,b.case_date,b.NUM_CALLS

或者

SELECT DISTINCT Count(CASE_ID)OVER (partition BY b.provider_group_ID) CaseCount,
                b.provider_group_ID,
                b.PROVIDER_GROUP_FUNCTION,
                b.case_date,b.NUM_CALLS
FROM   #f B
       LEFT OUTER JOIN #e A
                    ON A.CASE_DATE = B.CASE_DATE
                       AND A.PERSON_ID = B.PERSONID
                       AND A.PROVIDER_GROUP_ID = B.PROVIDER_GROUP_ID 

【讨论】:

  • 谢谢。并为努力 +1。
  • 我想保持这个开放一段时间。我仍在评估其他作品,但很快就会给出答案。谢谢。
【解决方案2】:
SELECT B.PROVIDER_GROUP_ID, B.PROVIDER_GROUP_FUNCTION, B.case_date 
     , COUNT(DISTINCT A.CASE_ID)  
  FROM dbo.DW_TELECOM_DATA B 
  LEFT OUTER JOIN Clear.T_CLEAR_SERVICE A 
    ON A.Case_date = B.Case_date
   AND A.PERSON_ID = B.PERSON_ID
   AND A.provider_group_ID = A.provider_group_ID 
 group by B.PROVIDER_GROUP_ID, B.PROVIDER_GROUP_FUNCTION, B.case_date

【讨论】:

    猜你喜欢
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2012-03-04
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多