例では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}の2組のクエリを記述します。 Bが1つ以上の行を持つことができる場合は、結合の共通部分を使用して、それらの20の順序ですべてのデータを返します。そうでない場合は、適切なサブクエリを使用して結果を制限できます。いずれにしても、この問題は単純なものでなければなりません。 〜私の2セント –
@clifton_hまあ、私は4つのテーブルを持っています:OrderDetails、Orders、OrderLines、Supplements:注文は複数の注文詳細を持つことができますが、注文線は1つの注文のみを持つことができます(注文ラインは複数のサプリメントを持つことができます)。 私はそれをより読みやすくするためにクエリを更新しました –