SQL服务器选择计数>超过1个
项目:经典ASP的VBScript/SQL Server 2012的SQL服务器选择计数>超过1个
我有2个表,Products
和Categories
。
我想建立一个SQL查询将返回ONLY有不止一个产品的类别。
2个表格之间的公钥是Category_id
(存在于Products
表格中,也存在于Categories
表格中)。
你试试这个:
SELECT *
FROM Categories C
WHERE C.Category_id IN (SELECT P.Category_id FROM Products P GROUP BY P.Category_id HAVING COUNT(*) > 1)
该问题明确指出**仅返回**具有**多于一个**产品的类别*您的答案不符合此要求。 – iamdave
非常感谢。我编辑过。 –
@Tien阮 你的代码工作完美! 但我忘了东西在我最初的问题非常重要: 在“产品”表我也有一个名为“einai_ram”字段。该字段的数据类型是“BIT”。 所以我想在查询中添加“einai_ram”字段必须为TRUE(选中)。 – user2986570
可以使用having
子句这种类型的查询,它过滤数据集后做所有的集合体:
declare @Categories table(CategoryID int);
declare @Products table(ProdID int, CategoryID int);
insert into @Categories values(1),(2),(3);
insert into @Products values(10,1),(20,1),(30,2),(40,2),(50,3);
select c.CategoryID
,count(1) as ProductCount
from @Categories c
left join @Products p
on(c.CategoryID = p.CategoryID)
group by c.CategoryID
having count(1) > 1;
输出:
+------------+--------------+
| CategoryID | ProductCount |
+------------+--------------+
| 1 | 2 |
| 2 | 2 |
+------------+--------------+
使用简单Group by
与Having
在明年演示: -
create table Products (ProductID int, name varchar(50), Category_id int)
insert into Products
values
(1,'aaaa',1),
(2,'bbbb',1),
(3,'ccccc',2),
(4,'11111',2),
(5,'11111ccc',3)
create table Categories (Category_id int, name varchar(50))
insert into Categories
values
(1,'Letters'),
(2,'Numbers'),
(3,'NumbersAndLetters')
-- CategoryID = 3 has only one product ..
select p.Category_id ,count(p.ProductID) CountProducts from
Products p inner join Categories c
on p.Category_id = c.Category_id
group by p.Category_id
having count(p.ProductID) > 1
结果: -
Category_id CountProducts
1 2
2 2
您是否在寻找'having'? '......有数(类别)> 1'吗? –
请发送您迄今为止所尝试的内容。例如你是否已经尝试了分组和德米特里提到的那些条款? – Tyron78