2017-06-13 51 views
0

項目:經典ASP的VBScript/SQL Server 2012的SQL服務器選擇計數>超過1個

我有2個表,ProductsCategories

我想建立一個SQL查詢將返回ONLY不止一個產品的類別。

2個表格之間的公鑰是Category_id(存在於Products表格中,也存在於Categories表格中)。

+1

您是否在尋找'having'? '......有數(類別)> 1'嗎? –

+0

請發送您迄今爲止所嘗試的內容。例如你是否已經嘗試了分組和德米特里提到的那些條款? – Tyron78

回答

0

你試試這個:

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

0

可以使用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 | 
+------------+--------------+ 
0

使用簡單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