2017-01-25 7 views
0

Я использую следующий SQL-запрос:граф в таблице SQL Server

select 
    FilteredSystemUser.systemuserid, 
    FilteredPhoneCall.regardingobjectid 
from 
    FilteredPhoneCall 
Inner Join 
    FilteredSystemUser on FilteredSystemUser.systemuserid in (FilteredPhoneCall.createdby) 
Inner Join 
    FilteredLead on FilteredLead.leadid = FilteredPhoneCall.regardingobjectid 
where 
    DateDiff(d, FilteredPhoneCall.createdon, GETDATE()) = 0 
    and FilteredLead.statecode = 0 
    and FilteredLead.ownerid = FilteredSystemUser.systemuserid 
    and FilteredPhoneCall.statecode = '1' 
    and FilteredPhoneCall.regardingobjecttypecode = 4 
    and FilteredPhoneCall.createdby in ('c2dd1ddc-0374-e611-80dc-00155d3d1992', '53cfbe3a-a09a-e611-80df-00155dce24d0') 

и получить следующий вывод

enter image description here

Здесь у меня есть две записи в regardingid 97C29D24-BEE2- E611-80F1-00155DCE24EF, 091B1CAB-C2E2-E611-80F1-00155DCE24EF против той же самой системы user.so мне нужно рассматривать это как отдельную запись и получать счетчик, отличный от этого, оба пользователя системы имеют еще два идентификатора.

enter image description here

Я ожидаю, что вышеуказанный выход enter image description here

+2

Put этот поиск в подзапрос, а затем группа и сосчитать –

+0

Использовать счетчик (FilteredPhoneCall.regardingobjectid) – fizzi

ответ

1

Чтобы получить количество различных значений опорного столбца здесь ... SQL: Count distinct values from one column based on multiple criteria in other columns

В вашем случае, попробуйте это :

select 
     FilteredSystemUser.systemuserid, 
     Count(DISTINCT FilteredPhoneCall.regardingobjectid) as NoofCall 
    from 
     FilteredPhoneCall 
    Inner Join 
     FilteredSystemUser on FilteredSystemUser.systemuserid in (FilteredPhoneCall.createdby) 
    Inner Join 
     FilteredLead on FilteredLead.leadid = FilteredPhoneCall.regardingobjectid 
    where 
     DateDiff(d, FilteredPhoneCall.createdon, GETDATE()) = 0 
     and FilteredLead.statecode = 0 
     and FilteredLead.ownerid = FilteredSystemUser.systemuserid 
     and FilteredPhoneCall.statecode = '1' 
     and FilteredPhoneCall.regardingobjecttypecode = 4 
     and FilteredPhoneCall.createdby in ('c2dd1ddc-0374-e611-80dc-00155d3d1992', '53cfbe3a-a09a-e611-80df-00155dce24d0') 
    Group by FilteredSystemUser.systemuserid 
0

Вы можете использовать счетчик() и группы путем для того чтобы достигнуть этого.

select  COUNT(DISTINCT FilteredPhoneCall.regardingobjectid) as NoofCall 
      ,FilteredSystemUser.systemuserid 
from  FilteredPhoneCall 
inner Join FilteredSystemUser 
on   FilteredSystemUser.systemuserid in(FilteredPhoneCall.createdby) 
Join  FilteredLead 
on   FilteredLead.leadid = FilteredPhoneCall.regardingobjectid 
where  DateDiff(d, FilteredPhoneCall.createdon, GETDATE()) = 0 
    and  FilteredLead.statecode = 0 and FilteredLead.ownerid = FilteredSystemUser.systemuserid 
    and  FilteredPhoneCall.statecode = '1' and FilteredPhoneCall.regardingobjecttypecode = 4 
    and  FilteredPhoneCall.createdby in ('c2dd1ddc-0374-e611-80dc-00155d3d1992','53cfbe3a-a09a-e611-80df-00155dce24d0') 
    and  FilteredSystemUser.systemuserid in ('c2dd1ddc-0374-e611-80dc-00155d3d1992','53cfbe3a-a09a-e611-80df-00155dce24d0') 
    GROUP BY FilteredSystemUser.systemuserid 
+0

Если я использую как этого его показывает 3 записей для каждого пользователя системы. Но мне нужно рассмотреть тот же regadingid, что и одиночная запись. – User

+0

В первых четырех строках есть дублирующаяся строка. Мне нужно проигнорировать дубликат – User

+0

. Можете ли вы изменить свой вопрос, покажите полный вывод, который вы ищете? – balaji

0

TRY ЭТО

;with CTE 
     AS (
    select 
     FilteredSystemUser.systemuserid, 
     FilteredPhoneCall.regardingobjectid 
    from 
     FilteredPhoneCall 
    Inner Join 
     FilteredSystemUser on FilteredSystemUser.systemuserid in (FilteredPhoneCall.createdby) 
    Inner Join 
     FilteredLead on FilteredLead.leadid = FilteredPhoneCall.regardingobjectid 
    where 
     DateDiff(d, FilteredPhoneCall.createdon, GETDATE()) = 0 
     and FilteredLead.statecode = 0 
     and FilteredLead.ownerid = FilteredSystemUser.systemuserid 
     and FilteredPhoneCall.statecode = '1' 
     and FilteredPhoneCall.regardingobjecttypecode = 4 
     and FilteredPhoneCall.createdby in ('c2dd1ddc-0374-e611-80dc-00155d3d1992', '53cfbe3a-a09a-e611-80df-00155dce24d0')) 

     select count(CTE.systemuserid) as myCOUNT,CTE.systemuserid,CTE.regardingobjectid from CTE 
     group by CTE.systemuserid,CTE.regardingobjectid 

enter image description here

+0

Пожалуйста, пройдите мой ожидаемый результат. мне нужно свернуть повторяющиеся строки как 1, а затем вычислить строки – User

+0

@User Вышеуказанный запрос показывает тот же результат, что вы отправили в OUTPUT IMAGE –

+0

Здесь c2dd ... системный идентификатор пользователя, имеющий 3 записи и 53cf ... системный пользователь, имеющий 3 записи , Но есть некоторые значения - дубликаты. Поэтому мне нужно взять одну запись в первом наборе дубликатов и взять еще одну запись из второго набора дубликатов. – User