[英]SQL Server : how to select just the top row of each group in a query that already has a join?
我試圖在SQL查詢中僅為每個組選擇第一行:
SELECT DISTINCT
CASE
WHEN S.ResEndDate = @StartDate
THEN 'ASAP'
ELSE ''
END AS 'ASAP',
R.RENTALNUMBER,
R.Area,
R.PadNum,
R.Size,
R.Pet,
R.Cost
FROM
RMS_Rentals R
INNER JOIN
RMS_Reservations S ON R.RentalNumber = S.RentalID
WHERE
Size = @RentalType
AND (RentalNumber NOT IN ((SELECT RentalID
FROM RMS_Reservations
WHERE NOT ((ResStartDate > @EndDate OR ResEndDate <= @StartDate)))))
GROUP BY
RENTALNUMBER, AREA, PadNum, Size, Pet, Cost, ResStartDate, ResEndDate
ORDER BY
RENTALNUMBER, 1 DESC
該查詢用於檢查並查看給定特定類型,預訂開始日期和結束日期的特定租金是否可用於租賃。 如果給定的開始日期與其他預訂的結束日期相同,則還必須盡快顯示。
現在的查詢方式是,對於所有盡快的租金顯示兩行(其中一列不是ASAP,另一處是ASAP)。
我希望對每個租金只顯示1行,以及該租金是否盡快。
我正在使用SQL Server 2008R2
結果集樣本:
ASAP RENTALNUMBER Area PadNum Size Pet
ASAP CB0001 Cabin Row 1 Cabin No
CB0001 Cabin Row 1 Cabin No
ASAP CB0003 Cabin Row 3 Cabin No
CB0003 Cabin Row 3 Cabin No
ASAP CB0005 Cabin Row 5 Cabin No
CB0005 Cabin Row 5 Cabin No
CB0006 Cabin Row 6 Cabin No
ASAP CB0007 Cabin Row 7 Cabin No
CB0007 Cabin Row 7 Cabin No
CB0008 Cabin Row 8 Cabin No
ASAP CB0009 Cabin Row 9 Cabin No
CB0009 Cabin Row 9 Cabin No
CB0010 Cabin Row 10 Cabin No
ASAP CB0012 Cabin Row 12 Cabin No
CB0012 Cabin Row 12 Cabin No
CB0052 Melody Lane 52 Cabin NO
ASAP CB0053 Melody Lane 53 Cabin No
CB0053 Melody Lane 53 Cabin No
ASAP CB0054 Melody Lane 54 Cabin No
CB0054 Melody Lane 54 Cabin No
CB0055 Melody Lane 55 Cabin No
RV0052 Shady Lane NULL Cabin No
我希望它返回的只是每個唯一的RentalNumber的一行,顯示該Rental是否是ASAP:
ASAP RENTALNUMBER Area PadNum Size Pet
ASAP CB0001 Cabin Row 1 Cabin No
ASAP CB0003 Cabin Row 3 Cabin No
ASAP CB0005 Cabin Row 5 Cabin No
CB0006 Cabin Row 6 Cabin No
ASAP CB0007 Cabin Row 7 Cabin No
CB0008 Cabin Row 8 Cabin No
ASAP CB0009 Cabin Row 9 Cabin No
CB0010 Cabin Row 10 Cabin No
ASAP CB0012 Cabin Row 12 Cabin No
CB0052 Melody Lane 52 Cabin NO
ASAP CB0053 Melody Lane 53 Cabin No
ASAP CB0054 Melody Lane 54 Cabin No
CB0055 Melody Lane 55 Cabin No
RV0052 Shady Lane NULL Cabin No
給定示例數據,您可以執行以下操作:
SELECT MAX(ASAP) as ASAP, RENTALNUMBER, Area, PadNum, Size, Pet
FROM t
GROUP BY RENTALNUMBER, Area, PadNum, Size, Pet;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.