我在SQL服务器中有一个主表和一个详细信息表(如类别和产品),而某些类别没有产品。
我想计算一个类别的产品,我的Where条件就像这个ProductID=100
。
在结果中,我希望在没有产品的类别附近有0,而其他类别包含产品计数。结果必须仅适用于ProductID=100
,结果中的数字是类别记录中的数字。我想创建一个视图,每次运行此查询时:
select * from -ViewName where ProductID=@newProductID
答案 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