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