Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server中解析1对多关系中的重复项_Sql Server_Tsql_Count_Distinct_One To Many - Fatal编程技术网

Sql server 在SQL Server中解析1对多关系中的重复项

Sql server 在SQL Server中解析1对多关系中的重复项,sql-server,tsql,count,distinct,one-to-many,Sql Server,Tsql,Count,Distinct,One To Many,我有一个表,其中包含如下数据: 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 Servi

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

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
我在两个表之间做了一个左外连接,它没有根据特定的提供者\组\ 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

试试这个。在您的
左侧外部联接中添加一个
ON
条件

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


您可能只需要将
和A.provider\u group\u id=B.provider\u group\u id
添加到join中。如果我这样做,我将不会得到结果集中的第二行(其中casecount为0),谢谢。和+1的努力。我想保持这个开放一段时间。我还在评估其他作品,但很快就会给出答案。谢谢
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 
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