主表的详细记录计数

时间:2012-02-13 09:39:18

标签: sql sql-server sql-server-2008 sql-server-2005 tsql

我在SQL服务器中有一个主表和一个详细信息表(如类别和产品),而某些类别没有产品。

我想计算一个类别的产品,我的Where条件就像这个ProductID=100

在结果中,我希望在没有产品的类别附近有0,而其他类别包含产品计数。结果必须仅适用于ProductID=100,结果中的数字是类别记录中的数字。我想创建一个视图,每次运行此查询时:

select * from -ViewName where ProductID=@newProductID

3 个答案:

答案 0 :(得分:1)

以这种方式尝试:

select count(p.*) as 'Number of Products'
from Categories c
left outer join Products p on c.ProductID = p.ProductID and ProductID = 100

答案 1 :(得分:1)

不确定我是否能帮到你所有

但是类似

Select Category_Name, IsNull(Count(Products.Category_ID),0)
From Categories
Outer join Products On Products.CategoryID = Categories.CategoryID
Where Products.ProductID = 100

应该让你离开...

答案 2 :(得分:1)

这可以在不使用视图的查询中相当简单地完成 - 它将类似于:

select c.CategoryName, count(p.ProductID)
from Category c
left join Product p 
       on c.CategoryID = p.CategoryID and p.ProductID = 100

请注意,ProductID上的条件必须是连接条件的一部分,而不是where子句,否则查询将只返回包含指定产品的类别。

通过使用交叉连接,可以在视图中以相当低效的方式完成此操作 - 例如:

create view vwCategoryProduct as
select c.CategoryName, 
       p.ProductID,
       case when c.CategoryID = p.CategoryID then 1 else 0 end as ProductIncluded
from Category c
cross join Product p 

- 然后从视图中选择:

select * from vwCategoryProduct where ProductID = 100