2017-01-25 3 views
0

ich die folgende SQL-Abfrage:Count in SQL Server-Tabelle

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') 

und erhalten die folgende Ausgabe

enter image description here

Hier habe ich zwei Einträge in regardingid 97C29D24-BEE2- E611-80F1-00155DCE24EF, 091B1CAB-C2E2-E611-80F1-00155DCE24EF gegen dasselbe System user.so ich muss dies als einzigen Eintrag betrachten und die anderen als die beiden Systembenutzer mit anderen zwei IDs erhalten.

enter image description here

Ich erwarte, dass die obige Ausgabe enter image description here

+2

Diese Suche in einer Unterabfrage und dann die Gruppe und zählt –

+0

Verwendung count (FilteredPhoneCall.regardingobjectid) – fizzi

Antwort

1

Zur Zählung der unterschiedlichen Werte einer Spalte Referenz hier ... SQL: Count distinct values from one column based on multiple criteria in other columns

Für Ihren Fall versuchen, diese :

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

Sie zählen können() und die Gruppe durch diese achive.

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

wenn ich so seine Shows 3 Datensätze für jeden Systembenutzer verwenden. Aber ich muss das selbe regadingid als einzelnen Eintrag betrachten. – User

+0

Es gibt doppelte Reihe war in den ersten vier rows.so ich muss das Duplikat ignorieren – User

+0

können Sie Ihre Frage bearbeiten zeigen die komplette Ausgabe, die Sie suchen? – balaji

0

TRY THIS

;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

Bitte gehen Sie durch mein erwartetes Ergebnis. Ich muss doppelte Zeilen als 1 reduzieren und dann die Zeilen berechnen – User

+0

@User Above Abfrage zeigt das gleiche Ergebnis, was Sie in OUTPUT IMAGE –

+0

hier gebucht c2dd ... System-Benutzer-ID mit 3 Datensätze und der 53cf ... Systembenutzer mit 3 Datensätze . Aber es gibt einige Werte, die Duplikate sind. Also muss ich einen einzelnen Datensatz in der ersten Menge von Duplikaten nehmen und einen weiteren Datensatz aus der zweiten Menge von Duplikaten nehmen. – User