我有一个查询带回以下内容:
并希望通过未来的预订为每位客户带回“是”。
将来使用以下方法为每次预订带回“是”相对容易:
Case [DepartDate]
When [Departdate] > getdate() then 'Yes' else 'no'
End AS 'Future booking?'
..但我一直坚持如何在未来的预订中对每个客户回复“是”(无论输出线上的预订如何)。
任何人都可以帮忙吗?
我有一个查询带回以下内容:
并希望通过未来的预订为每位客户带回“是”。
将来使用以下方法为每次预订带回“是”相对容易:
Case [DepartDate]
When [Departdate] > getdate() then 'Yes' else 'no'
End AS 'Future booking?'
..但我一直坚持如何在未来的预订中对每个客户回复“是”(无论输出线上的预订如何)。
任何人都可以帮忙吗?
我认为您正在寻找CASE
,MAX
和OVER
以下应该会给你想要的结果:
SELECT BookingID,
ClientID,
CASE
WHEN MAX(DepartDate) OVER(PARTITION BY ClientId) > GETDATE() THEN 'Yes'
ELSE 'No'
END AS [Future booking]
FROM Bookings
您可以从单独的查询中提取未来的预订价值。
select booking_id, client_id, depart_date,
coalesce( (select distinct 'yes'
from booking future
where future.client_id = all_bookings.client_id
and future.depart_date > GETDATE() ), 'no') as future_booking
from booking all_bookings
这将表现良好,尤其是如果您在 client_id 和 leave_date 上有索引。
select b.booking_id,
b.client_id,
b.depart_date,
case when future_booking.client_id is null then 'No'
else 'Yes' end as HasFuture
from booking b
left join
(select distinct client_id
from booking
where depart_date > GETDATE()
) as future_booking
on b.client_id = future_booking.client_id
SELECT [BookingID]
,[ClientID]
,[DepartDate]
,CASE
When [DepartDate] > getdate() then 'Yes' else 'no'
END as 'FutureDate?'
FROM [dbo].[Bookings]