Я хочу создать условное соединение с таблицей в моем запросе T-SQL. Таблицы, используемые в этом примере, взяты из базы данных Northwind (только с одной дополнительной таблицей ProductCategories)
Таблица Продукты и категории таблиц имеют отношение «многие ко многим», поэтому таблица ProductCategories входит в картину.
Мне нужна сумма в столбце Количество в таблице OrderDetails для каждого из продуктов, подпадающих под определенную категорию. Итак, у меня есть запрос, подобный приведенному ниже
Select p.ProductName, Sum(od.Quantity) As Qty
From Products p
Join OrderDetails od On od.ProductID = p.ProductID
Join ProductCategories pc On pc.ProductID = p.ProductID
And pc.CategoryID = @CategoryID
Group By p.ProductName
@ CategoryID - необязательный параметр. Так что, если он не предоставлен, присоединение к таблице ProductCategories не потребуется
и запрос должен выглядеть так, как показано ниже
Select p.ProductName, Sum(od.Quantity) As Qty
From Products p
Join OrderDetails od On od.ProductID = p.ProductID
Group By p.ProductName
Я хочу достичь этого, не повторяя весь запрос с условиями If (как показано ниже)
If @CategoryID Is Null
Select p.ProductName, Sum(od.Quantity) As Qty
From Products p
Join OrderDetails od On od.ProductID = p.ProductID
Group By p.ProductName
Else
Select p.ProductName, Sum(od.Quantity) As Qty
From Products p
Join OrderDetails od On od.ProductID = p.ProductID
Join ProductCategories pc On pc.ProductID = p.ProductID
And pc.CategoryID = @CategoryID
Group By p.ProductName
Это упрощенная версия запроса, которая имеет много других таблиц и условий, таких как ProductCategories. И потребует нескольких кратных условий If и повторения запроса. Я также попытался динамически генерировать запрос. Это работает, но запрос вообще не читается.
Есть какие-нибудь решения?
Спасибо.