sql server - SQL JOIN doubling values -
i have 2 temp tables following data:
temp_aht
temp_1
i use query join 2 tables on column incident:
    select         count(distinct a.incident) nr_of_tickets        ,a.[service]       ,sum(case when a.status_switch  in ('assigned » in progress','assigned » pending','assigned » resolved','assigned » closed') a.totalseconds else null end) assignedtime       ,sum(case when a.status_switch  in ('in progress » assigned','in progress » assigned','in progress » pending','in progress » resolved') a.totalseconds else null end) progresstime       ,sum(case when a.status_switch  in ('pending » assigned','pending » in progress') a.totalseconds else null end) pendingtime       ,sum(b.creation) creation       ,sum(b.[call duration]) [call duration]   ##temp_aht inner join ##temp_1 b on a.incident = b.incident_id  group a.[service],b.creation,b.[call duration] if join tables above query sums won't correct. think because in both tables have multiple rows same incident id.
but how can join table , take first row ##temp_1 if match found ?
the problem have multiple rows each incident in both tables. further complicated fact joining on 1 column (incident) , aggregating (service).
then, group by includes aggregated columns b table, doesn't make sense.
the solution aggregate both tables before doing join. think want:
select sum(nr_of_tickets), a.[service],        sum(assignedtime) assignedtime,        sum(progresstime) progresstime,        sum(pendingtime) pendingtime,        sum(b.creation) creation,        sum(b.[call duration]) [call duration]  (select a.service, count(distinct a.incident) nr_of_tickets,              sum(case when a.status_switch  in ('assigned » in progress','assigned » pending','assigned » resolved','assigned » closed') a.totalseconds end) assignedtime              sum(case when a.status_switch  in ('in progress » assigned','in progress » assigned','in progress » pending','in progress » resolved') a.totalseconds end) progresstime,              sum(case when a.status_switch  in ('pending » assigned','pending » in progress') a.totalseconds end) pendingtime       ##temp_aht       group a.incident, a.service      ) inner join      (select b.incident,               sum(b.creation) creation,              sum(b.[call duration]) [call duration]       ##temp_1 b       group b.incident      ) b      on a.incident = b.incident_id group a.[service] 

Comments
Post a Comment