프런트 엔드에서 페이징을 수행하고 정상적으로 작동하는 저장 프로 시저가 있습니다. 이제 해당 프로 시저를 반환하여 20 개의 네 열로 그룹화 한 다음 가장 낮은 우선 순위가 포함 된 각 그룹 내에서만 행을 반환해야합니다. 따라서 resort_id, 침실, 주방 및 체크인 (날짜)이 모두 일치하면 최소 우선 순위가있는 행만 반환됩니다. 여전히 페이징 기능을 유지해야합니다. @startIndex와 @upperbound는 페이징을 위해 프론트 엔드에서 프로 시저로 전달되는 parms입니다. 나는 RANK OVER (PARTITION BY)가 답이 될 것이라고 생각하고 있습니다. 나는 그것을 모두 정리하는 방법을 알 수 없습니다. 수정 후T-SQL (2005) RANK OVER (PARTITION BY)가 응답입니까?
SELECT I.id,
I.resort_id,
I.[bedrooms],
I.[kitchen],
I.[checkin],
I.[priority],
I.col_1,
I.col_2 /* ..... (more cols) */
FROM (
SELECT ROW_NUMBER() OVER(ORDER by checkin) AS rowNumber,
*
FROM Inventory
) AS I
WHERE rowNumber >= @startIndex
AND rowNumber < @upperBound
ORDER BY rowNumber
예 2 :
이SELECT I.resort_id,
I.[bedrooms],
I.[kitchen],
I.[checkin],
I.[priority],
I.col_1,
I.col_2 /* ..... (more cols) */
FROM Inventory i
JOIN
(
SELECT ROW_NUMBER() OVER(ORDER BY h.checkin) as rowNumber, MIN(h.id) as id
FROM Inventory h
JOIN (
SELECT resort_id, bedrooms, kitchen, checkin, id, MIN(priority) as priority
FROM Inventory
GROUP BY resort_id, bedrooms, kitchen, checkin, id
) h2 on h.resort_id = h2.resort_id and
h.bedrooms = h2.bedrooms and
h.kitchen = h2.kitchen and
h.checkin = h2.checkin and
h.priority = h2.priority
GROUP BY h.resort_id, h.bedrooms, h.kitchen, h.checkin, h.priority
) AS I2
on i.id = i2.id
WHERE rowNumber >= @startIndex
AND rowNumber < @upperBound
ORDER BY rowNumber
재고가 있습니까? InventoryId? 신분증? – jTC
@jTC - 예 - id는 pk이며 반환됩니다. 수정 된 코드 예제가 표시됩니다. –