2013-08-15 3 views
1

j'ai une table journal sql avec deux colonnes comme celui-ci:obtenir des enregistrements uniques à l'aide de sql

RegistrantID compnayID 

1    1 
1    1 
2    1 
3    1 
1    2 
2    2 
2    2 
3    2 

J'utilise la requête suivante pour obtenir uniques RegistrantID s

SELECT 'Number of unique Profile views' AS Data, 
      4 AS Action, 
      COUNT(DISTINCT RegistrantID) AS Counts 
    FROM dbo.hr_ActionLog 
    WHERE Action = 4 
     AND (@DateFrom IS NULL OR dbo.DateOnly(ActionDate) >= dbo.DateOnly(@DateFrom)) 
     AND (@DateTo IS NULL OR dbo.DateOnly(ActionDate) <= dbo.DateOnly(@DateTo)) 
     AND (@CompanyID IS NULL OR CompanyID = @CompanyID) 
     AND (@RegistrantID IS NULL OR RegistrantID = @RegistrantID) 
     AND (@VacancyID IS NULL OR VacancyID = @VacancyID) 

Mais maintenant, je veux obtenir RegistrantId s par entreprise de sorte que si un registrantid est pour deux sociétés différentes, il sera ajouté deux fois, mais s'il est plus d'une fois pour un companyid, il sera ajouté une fois. Avec le nombre de données ci-dessus devrait être de 6. Dois-je utiliser le groupe par?

S'il vous plaît suggèrent

Répondre

4

Essayez ceci:

SELECT 'Number of unique Profile views'    AS Data, 
     4            AS Action, 
     Count(DISTINCT Cast(REGISTRANTID AS VARCHAR(5)) + '-' 
         + Cast(COMPNAYID AS VARCHAR(5))) AS Counts 
FROM DBO.HR_ACTIONLOG 

En COUNT ing sur concaténation des deux colonnes, on peut compter le nombre de lignes uniques entre les deux.

J'ai supprimé les conditions WHERE afin que je puisse mettre en place un exemple de travail sur SQL Fiddle.
S'il vous plaît laissez-moi savoir ce que vous pensez.

+1

qui a fait le tour, Merci @Gidil – DotnetSparrow

+1

1 - un peu en retard avec la réponse :) – Devart

2

Vous pouvez le faire sans GROUP BY il suffit de remplacer votre COUNT COUNT en valeur complexe pour examle:

COUNT(DISTINCT CAST(RegistrantID as VARCHAR(100)) 
       +'-'+CAST(CompanyID as VARCHAR(100)) 
) AS Counts 
Questions connexes