2016-08-03 5 views
0

У меня есть таблица, как в первой таблице ниже (извините, если она не отображается правильно, я новичок в StackOverflow и не совсем понял, как показывать таблицы в вопросе) , Я уже получил помощь, чтобы подсчитать количество идентификаторов, которые не дублируются (я не имею в виду отдельный счетчик. Явный счет возвратит результат 7 (a, b, c, d, e, f, g). Я хотел, чтобы он возвращал счетчик 4 (a, c, d, f). Это идентификаторы, которые не имеют нескольких кодов типов). Теперь мне нужно сделать еще один шаг, чтобы показать, сколько раз в коде кода есть идентификатор только с одним кодом. Например, мы хотим увидеть результат, подобный второй таблице ниже. Существует 2 экземпляра идентификаторов, которые имеют код одного типа из 444 (c, f), есть один экземпляр идентификатора, который имеет код одного типа из 111 (a) и 222 (d).Подсчет данных с помощью SQL

Для справки, запрос, который получил мне количество идентификаторов, которые имеют только один тип кода

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

У меня возникли проблемы с пониманием того, что вы просите. –

+0

В своем вопросе не говорите о том, какую другую помощь вы получили и какие существуют другие возможности. Сделайте свой вопрос максимально простым, насколько это возможно. – Missy

ответ

1

может быть, это то, что вы просите?

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

Это выглядит как отличная догадка. – shawnt00

+0

Обратите внимание, что эти квадратные скобки для идентификаторов с разделителями являются специфичными для продукта. ANSI SQL имеет двойные кавычки, например. '' код типа "'. – jarlh

+0

это сработало! Спасибо!! –

1

Вы можете решить эту проблему с помощью вложенной агрегации:

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