【发布时间】:2011-08-11 16:46:01
【问题描述】:
在我的应用程序中,我有一组过滤器可以在列出资源时应用,这些过滤器通过在执行查询之前添加 WHERE 子句等来构建查询。这是使用 SQL Server 2008。
我有两个相关的表,一个包含有关资源的一些静态数据,另一个可以包含与该资源有关的任意/可选字段。
第一个表是这样的(表名和字段已更改):
CREATE TABLE Resources (
ResID varbinary(28),
... extra stuff omitted
type integer );
第二个表只有名称/值对和相应的资源 ID
CREATE TABLE ResourceFields (
ResID varbinary(28) NOT NULL,
Name nvarchar(255) NOT NULL,
Value nvarchar(1024) NOT NULL);
因此,对于本示例,“ResourceFields”中可能有多个行,名称 =“ContactName”,用于同一个 ResID。
我想要做的是计算“资源”表中的行数,这些行在“资源字段”中列出了多个“联系人姓名”,“类型”等于某个值。强>
我想出了这个(别笑——我知道的 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 个单独的计数)。
我做错了什么?
【问题讨论】:
标签: sql sql-server group-by