2016-08-03 20 views
0

Ich habe eine Tabelle wie die erste Tabelle unten (Sorry, wenn es nicht richtig angezeigt wird, ich bin neu in StackOverflow und habe nicht ganz den Aufwand, wie Tabellen in der Frage angezeigt werden) . Ich habe bereits Hilfe bekommen, eine Anzahl von IDs zu zählen, die nicht dupliziert sind (ich meine keine eindeutige Zählung. Eine eindeutige Zählung würde ein Ergebnis von 7 zurückgeben (a, b, c, d, e, f, g). Ich wollte, dass es eine Zahl von 4 (a, c, d, f) zurückgibt.Dies sind die IDs, die nicht mehrere Typencodes haben. Jetzt muss ich noch einen Schritt weiter gehen, um zu zeigen, wie oft innerhalb eines Typcodes eine ID mit nur diesem Typcode existiert. Zum Beispiel möchten wir ein Ergebnis wie die zweite Tabelle unten sehen. Es gibt 2 Instanzen von IDs, die einen einzelnen Typcode von 444 (c, f) haben, es gibt eine Instanz einer ID, die einen einzelnen Typencode von 111 (a) und 222 (d) hat.Zählen von Daten mit SQL

Als Referenz die Abfrage, die mir die Anzahl der IDs bekam, die nur eine Art Code haben, ist

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


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 

Type Code|Count 
111|1 
222|1 
444|2 
+0

Ich habe Probleme zu verstehen, was ihr bittet. –

+0

Sprechen Sie in Ihrer Frage nicht darüber, welche andere Hilfe Sie erhalten haben und welche anderen Möglichkeiten bestehen. Stellen Sie Ihre Frage so einfach wie möglich zu verstehen. – Missy

Antwort

1

vielleicht ist das, was Sie fragen?

SELECT [type code], 
     COUNT(*) [count] 
FROM mytable 
WHERE [ID] IN (SELECT [ID] 
        FROM  mytable 
        GROUP BY [ID] 
        HAVING COUNT([type code]) = 1) 
GROUP BY [type code] 
+1

Das sieht nach einer großen Vermutung aus. – shawnt00

+0

Beachten Sie, dass diese eckigen Klammern für Begrenzungsbezeichner produktspezifisch sind. ANSI SQL hat doppelte Anführungszeichen, z. '" Code eingeben "'. – jarlh

+0

das hat funktioniert! Vielen Dank!! –

1

Sie lösen diese eine verschachtelte Aggregation mit:

SELECT type_code, COUNT(*) 
FROM 
(-- as this looks for a single row you can simply add the type code 
    SELECT ID, MIN(type_code) as type_code 
    FROM mytable 
    GROUP BY ID 
    HAVING COUNT(*) = 1 
) AS dt 
GROUP BY type_code