2016-07-25 1 views
0

J'ai une table comme ci-dessous. J'essaie de faire un décompte des ID qui ne sont pas dupliqués. Je ne veux pas dire un nombre distinct. Un compte distinct retournerait un résultat de 7 (a, b, c, d, e, f, g). Je veux qu'il retourne un nombre de 4 (a, c, d, f). Ce sont les ID qui n'ont pas plusieurs codes de type. J'ai essayé les requêtes suivantes mais j'ai obtenu des comptes de 0 (le résultat devrait être un nombre dans les millions).Besoin d'aide pour écrire une requête SQL pour compter les lignes non dupliquées (pas un nombre distinct)

select ID, count (ID) as number 
from table 
group by ID 
having count (ID) = 1 

Select count (distinct ID) 
From table 
Having count (ID) = 1 

ID|type code 
a|111 
b|222 
b|333 
c|444 
d|222 
e|111 
e|333 
e|555 
f|444 
g|333 
g|444 

grâce à @scaisEdge! La première requête que vous m'avez fournie m'a donné exactement ce que je cherchais dans la question ci-dessus. Maintenant que cela a été compris, mes dirigeants ont demandé que l'on fasse un pas de plus pour montrer combien de fois il y a une identification dans un seul code de type. Par exemple, nous voulons voir

code de type | compte 111 | 1 222 | 1 444 | 2

Il y a 2 cas d'ID qui ont un seul code de type 444 (c, f) , il y a une instance d'un ID qui a un seul code de type 111 (a) et 222 (d). J'ai essayé de modifier la requête en tant que telle, mais ont été à venir à travers des erreurs lors de l'exécution de la requête

select count (de admin_sys_tp_cd) sous le numéro de ( select cont_id de imdmadmp.contequiv groupe par cont_id ayant count (*) = 1) t groupe par admin_sys_tp_cd

Répondre

1

Si vous voulez que le nombre pourrait être

select count(*) from (
    select id from 
    my_table 
    group by id 
    having count(*) =1 
) t 

si vous voulez que l'id

select id from 
    my_table 
    group by id 
    having count(*) =1 
+0

Ce qui est différent entre le nombre (*) et Count (ID)? Pouvez-vous expliquer si cela ne vous dérange pas de me demander? – AVK

+0

la plupart du temps la même chose, seulement quand ID est nul il ne sera pas compté. – Kostya

+1

@AVKNaidu Ce lien pourrait vous aider https://www.percona.com/blog/2007/04/10/count-vs-countcol/ .. compter essentiellement (*) compter le nombre de lignes satisfaisant la condition where, count (ID) compte le mber les lignes avec id (pas nul) qui satisfont la condition where – scaisEdge

-2

Hou sur ce que vous faites une boucle dans une table temporaire ?:

select 
* 
into #control 
from tablename 

declare @acum as int 
declare @code as char(3) 
declare @id as char(1) 
declare @id2 as int 
select @acum=0 
while exists (select* from #control) 
begin 
    select @code = (select top 1 code from #control order by id) 
    select @id = (select top 1 id from #control order by id) 
    select @id2 =count(id) from #control where id in (select id from tablename where id = @id and code <> @code) 
    if @id2=0 
    begin 
     select @acum = @acum+1 
    end 

    delete #control 
     where id = @id --and code = @code 
end 
drop table #control 
print @acum