Ваши результаты заинтересованы только в показе полей, которые поступают из Products
и #ProductIds
- (ProductId
и IndexId
) - однако вы затем присоединяетесь к третьей таблице, которую вы пытаетесь заказать по (* 1005)*).
Если у вас есть ProductId
, с которым связано 100 ProductStores
, то DISTINCT
покажет вам, что one ProductId
независимо поля ProductStores.Status
.
Может быть, лучше спросить вас - какой ответ вы хотите?
Я предполагаю, что вы хотите перечислить продукты, которые имеют Status = 1
связано с ними в первую очередь.Однако, похоже, ничто не помешает ассоциированию Продукта с и Status = 1
магазином и Status = 0
магазином.Вот почему SQL не может дать вам ответы в этом случае - когда вам требуется по одной строке для каждого продукта.
Чтобы упорядочить по статусу, вам потребуется вывести его.Однако тогда вы получите строку для каждой комбинации Product, Index, Status. Ответ
@ mimamiq может работать без внешнего SELECT
...
SELECT DISTINCT
P.ProductId,
PID.IndexId,
PS.Status
FROM Products AS P
INNER JOIN #ProductIds AS PID ON P.ProductId = PID.ProductId
INNER JOIN ProductStores AS PS ON P.ProductId = PS.ProductId
ORDER BY
CASE tb.Status WHEN 1 THEN 1 ELSE 2 END
OFFSET (@PageIndex * @PageSize) ROWS FETCH NEXT (@PageSize) ROWS ONLY;
Но обратите внимание - если вы хотите одна строка для каждой комбинации продукта / продукта - тогда это не сработает (если в вашей базе данных нет других ограничений, о которых мы не знаем).