Моя первая версия вопроса была запутанной, мне нужно сделать небольшие куски. Если пользователь может фильтровать продукты с веб-сайта, один продукт должен появляться только один раз в списке. Из-за присоединения этот код дает мне два одинаковых продукта, как я могу это решить? Я думаю, что мне нужно решение без использования отдельных, потому что это даст мне головную боль позже.Получите отдельные строки при фильтрации и использовании динамического порядка на
код из AW2012:
declare @safetystocklevel int
set @safetystocklevel = 1000
declare @status int
set @status = 2
select * from Production.Product p
inner join Purchasing.ProductVendor pv on p.ProductID = pv.ProductID
inner join Purchasing.Vendor v on v.BusinessEntityID = pv.BusinessEntityID
inner join Production.ProductDocument pd on p.ProductID = pd.ProductID
inner join Production.Document d on d.DocumentNode = pd.DocumentNode
WHERE
(@safetystocklevel = '' or p.SafetyStockLevel = @safetystocklevel)
and (@status = '' or d.Status = @status)
выход:
PRODUCTID Название
506 Рефлектор
506 Рефлектор
Edit:
Спасибо, я теперь использовать группу по получить различные строки , Да, возможно, используя группу работами для меня, Im собирается сделать некоторые испытания теперь .....
Привет снова
Я хочу, чтобы все продукты, чтобы можно было найти, так что я думаю, мне нужно левое внешнее соединение, чтобы достичь что. Когда я добавляю динамический порядок, я попадаю в неприятности, добавляется больше строк. Возможно, потому что я должен добавить poh.Status в группу. В таблице продуктов есть 504 строки, этот запрос возвращает 776 строк. (я удалил фильтрацию в WHERE, поскольку это не интересно сейчас, и Im присоединение к другим таблицам теперь только, чтобы получить больше строк, чтобы играть с)
Код:
declare @sortType nvarchar(50)
set @sortType = 'Status'
select p.ProductID,
CASE WHEN @sortType = 'Status' THEN poh.Status END as Status,
CASE WHEN @sortType = 'ProductId' THEN p.ProductID END as ProductId
from Production.Product p
left outer join Purchasing.PurchaseOrderDetail pod on p.ProductID = pod.ProductID
left outer join Purchasing.PurchaseOrderHeader poh on poh.PurchaseOrderID = pod.PurchaseOrderID
left outer join Production.ProductDocument ppd on ppd.ProductID = p.ProductID
left outer join Production.Document pd on pd.DocumentNode = ppd.DocumentNode
group by p.ProductID, poh.Status
ORDER BY
CASE WHEN @sortType = 'Status' THEN poh.Status END ASC,
CASE WHEN @sortType = 'ProductId' THEN p.ProductID END ASC
Уточнить вопрос? Не совсем ясно, что вы хотите добиться. Можете ли вы показать таблицу (предположительно ручной работы), которая показывает (некоторые) данные, которые вы ожидаете получить? –
Привет, я обновил вопрос –
@CliffSmith, я полагаю, поскольку вы используете разные, что одна из таблиц 1-n, в этом случае какая? Я имею в виду, что приводит к тому, что в наборе результатов есть несколько строк продукта, где вы только хотите? – mewm