gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:44:59 24 4
gpt4 key购买 nike

在我的应用程序中,我有一组过滤器可以在列出资源时应用,这些过滤器通过在执行查询之前添加 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 个单独的计数)。

我做错了什么?

最佳答案

只需将原始查询用作派生表(将其放入子选择中):

SELECT COUNT(*)
FROM (
SELECT count(*) AS C
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;
) s

关于SQL查询以获取另一个表中多于一行的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7029747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com