예를 들어 20 가지 주문을 반환해야하지만 쿼리에 올바르게 페이지를 매기는 방법이 없습니다.TransactSQL 유니온 모두 AND 페이징
다음 쿼리는 20 개의 첫 번째 주문뿐만 아니라 20 개의 행 (주문, 주문 라인, 보충)을 반환합니다.
SELECT *
FROM
(
SELECT *
FROM (SELECT *
FROM [WS].[viewOrderDetail] AS [Extent1]
WHERE [Extent1].CustomerID IN (2,7,8,9)
) AS [Project1]) AS [Cmd]
LEFT JOIN [WS].[viewOrders] AS [orders] ON ([orders].Id = [cmd].OrderId)
LEFT JOIN [WS].[viewOrderLines] AS [OrderLines] ON ([OrderLines].OrderId= [Cmd].[OrderId])
LEFT JOIN [WS].[viewOrderLineSupplements] AS [Supp] ON (Supp.OrderLineId = OrderLines.Id)
WHERE cmd.OrderId LIKE '%11301%'
union all
SELECT *
FROM
(
SELECT *
FROM (SELECT *
FROM [WS].[viewOrderDetail] AS [Extent1]
WHERE [Extent1].CustomerID IN (2,7,8,9)
) AS [Project1]) AS [Cmd]
LEFT JOIN [WS].[viewOrders] AS [orders] ON ([orders].Id = [cmd].OrderId)
LEFT JOIN [WS].[viewOrderLines] AS [OrderLines] ON ([OrderLines].OrderId= [Cmd].[OrderId])
LEFT JOIN [WS].[viewOrderLineSupplements] AS [Supp] ON (Supp.OrderLineId = OrderLines.Id)
WHERE OrderLines.Id LIKE '%11301%'
ORDER BY [Cmd].Id ASC OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY
실제 결과 : Actual result
이 될해야 : Should result
당신은 내가 제대로 페이지를 매기는 방법에 어떤 생각을 가지고 있습니까?
해결책을 찾으려면 여기를 클릭하십시오. http://stackoverflow.com/questions/109232/what-is-the-best-way-to-paginate-results-in-sql-server –
공정하게하려면이 문제가 있어야합니다. 당신이하고 싶은 일을 깔끔하게 나눕니다. 첫번째를 원해? 해당 세부 정보가 포함 된 20 개 주문 집합입니다. 따라서 {A} = 20 {Orders} 및 {B} = N {Ordesimples} 인 두 세트의 쿼리를 설명합니다. B가 하나 이상의 행을 가질 수있는 경우 조인의 교차를 사용하여 20 개의 주.에있는 모든 데이터를 리턴하십시오. 그렇지 않은 경우 적절한 하위 쿼리를 사용하여 결과를 제한 할 수 있습니다. 어느 쪽이든,이 문제는 간단해야합니다. ~ 내 2 센트 –
@clifton_h 글쎄, 나는 4 개의 테이블을 가지고있다 : OrderDetails, Orders, OrderLines, Supplements : 주문은 여러 개의 주문 상세 정보를 가질 수 있지만 주문 라인은 하나의 주문 만 가질 수있다 (주문 라인에는 여러 개의 보충 물을 가질 수있다). 더 읽기 쉽게 쿼리를 업데이트했습니다. –