Reputation: 2402
I have a table which has data like:
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
And I have another table called TeleComData like:
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
What I want is
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
But as of now, I get the following
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
I did a left outer join between the two tables and instead of counting the Cases based on a particular PROVIDER_GROUP_ID, it duplicates it. I cant seem to figure out whats going on with my code. Here is the piece that I have got so far:
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
Upvotes: 2
Views: 74
Reputation: 93754
Try this. Add one more ON
condition in your Left Outer Join
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
Or
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
Upvotes: 2
Reputation: 45096
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
Upvotes: 0