Запись количества деталей для основной таблицы - PullRequest
2 голосов
/ 13 февраля 2012

У меня есть основная таблица и таблица сведений (например, категории и продукты) на сервере SQL, а некоторые категории не имеют продуктов.

Я хочу посчитать продукты категории и мое условие "Где", как это ProductID=100.

В результате я хочу иметь 0 рядом с категориями, в которых нет товаров, а в других категориях - количество товаров. результат должен быть только для ProductID=100, а число от Result равно числу от записи Categories. хочу создать представление, и каждый раз, когда я запускаю этот запрос:

select * from -ViewName where ProductID=@newProductID

Ответы [ 3 ]

1 голос
/ 13 февраля 2012

Не уверен, что я вас всех об этом

но что-то вроде

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

Должен ли ты уйти ...

1 голос
/ 13 февраля 2012

Это можно сделать довольно просто в запросе, который не использует представления - это будет что-то вроде:

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
1 голос
/ 13 февраля 2012

Попробуйте так:

select count(p.*) as 'Number of Products'
from Categories c
left outer join Products p on c.ProductID = p.ProductID and ProductID = 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...