相关疑难解决方法(0)

SQL查询以获取另一个表中具有多个行的行数

在我的应用程序中,我有一组可以在列出资源时应用的过滤器,这些过滤器在执行查询之前通过添加WHERE子句等来构建查询.这是使用SQL Server 2008.

我有两个相关的表,一个包含有关资源的一些静态数据,另一个可以包含与该资源有关的任意/可选字段.

第一个表是这样的(表名和字段已更改):

CREATE TABLE Resources (
    ResID       varbinary(28),

    ... extra stuff omitted

    type        integer );
Run Code Online (Sandbox Code Playgroud)

第二个表只有名称/值对和相应的资源ID

CREATE TABLE ResourceFields (
    ResID       varbinary(28) NOT NULL,

    Name        nvarchar(255) NOT NULL,
    Value       nvarchar(1024) NOT NULL);
Run Code Online (Sandbox Code Playgroud)

因此,对于此示例,"ResourceFields"中可能有多行,其中name ='ContactName'表示相同的ResID.

我想要做的是获取'Resources'表中有多个'ContactName'列在'ResourceFields'中且'type'等于某个值的行数.

我想出了这个(不要笑 - 我知道足够的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;
Run Code Online (Sandbox Code Playgroud)

但是不是在'Resources'中返回行数(我的测试集中的43)的计数,而是返回所有返回的COUNT(rf.Value)值(即43个单独的计数).

我究竟做错了什么?

sql sql-server group-by

3
推荐指数
1
解决办法
3万
查看次数

标签 统计

group-by ×1

sql ×1

sql-server ×1