SQL服务器选择计数>超过1个

问题描述:

项目:经典ASP的VBScript/SQL Server 2012的SQL服务器选择计数>超过1个

我有2个表,ProductsCategories

我想建立一个SQL查询将返回ONLY不止一个产品的类别。

2个表格之间的公钥是Category_id(存在于Products表格中,也存在于Categories表格中)。

+1

您是否在寻找'having'? '......有数(类别)> 1'吗? –

+0

请发送您迄今为止所尝试的内容。例如你是否已经尝试了分组和德米特里提到的那些条款? – Tyron78

你试试这个:

SELECT * 
FROM Categories C 
WHERE C.Category_id IN (SELECT P.Category_id FROM Products P GROUP BY P.Category_id HAVING COUNT(*) > 1) 
+0

该问题明确指出**仅返回**具有**多于一个**产品的类别*您的答案不符合此要求。 – iamdave

+1

非常感谢。我编辑过。 –

+0

@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 byHaving在明年演示: -

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