В моем приложении у меня есть набор фильтров, которые можно применять при перечислении ресурсов, который создает запрос путем добавления предложений WHERE и т. Д. Перед выполнением запроса.Это использует SQL Server 2008.
У меня есть две соответствующие таблицы, одна из которых содержит некоторые статические данные о ресурсе, а другая может содержать произвольные / необязательные поля, относящиеся к этому ресурсу.
Перваятаблица выглядит примерно так (имена и поля таблицы изменены):
CREATE TABLE Resources (
ResID varbinary(28),
... extra stuff omitted
type integer );
Во второй таблице просто есть пары имя / значение и соответствующий идентификатор ресурса
CREATE TABLE ResourceFields (
ResID varbinary(28) NOT NULL,
Name nvarchar(255) NOT NULL,
Value nvarchar(1024) NOT NULL);
Итак, для этого примера, в ResourceFields может быть несколько строк с именем = «ContactName» для одного и того же ResID.
Что я хочу сделать, так это получить количество строк в таблице «Ресурсы»которые имеют более одного «ContactName» в списке «ResourceFields» с «типом», равным некоторому значению.
Я придумал это (не смейтесь - я знаю достаточно SQL, чтобы вызватьпроблемы)
SELECT count(r.ResID)
FROM Resources as r
INNER JOIN ResourceFields AS rf
ON rf.ResID = r.ResID
AND rf.name = 'ContactName'
WHERE r.type = 1
GROUP BY rf.ResID
HAVING COUNT(rf.Value) > 1;
но вместо того, чтобы возвращать счетчик количества строк (43 в моем наборе тестов) в «Ресурсах», я получаю все возвращенные значения COUNT (rf.Value) (то есть43 индивидуальных сотрудникаunts).
Что я делаю не так?