大家好,我有一个名为booking的表(我将列对齐)
CustID VenueID BookingDt Session
45 44 2010-03-20 00:00:00.000 PM
45 44 2010-03-27 00:00:00.000 PM
45 44 2009-10-18 00:00:00.000 PM
45 44 2009-10-24 00:00:00.000 PM
我有另一个名为场馆的表
oID oLocation oPitch
1 Left Park Rugby
2 Right Park Rugby
表由场馆连接。oID =预订.CustID
我想创建一个这样的表
X列=周Y列=位置
oID oSun oMon oTue oWed oThu oFri oSat
1 x x x x
2 x x x x x x x
我相信我必须与预订数据库中的数据进行交叉连接
如
select distinct v.olocation , b.BookingDt from oVenue V
cross join tblBookings B
Where B.VenueID=V.oID
and DATEPART( wk, b.BookingDt )='44'
and DATEPART( yy, b.BookingDt )='2009'
但是这是oID和日期,我想让它检查日期是否在那里,如果有,在它的地方放一个x或者在它的地方放一个"
不知道该怎么做。非常感谢您的帮助。
Thanks in advance
由于您已经限制了查询中的星期和年份,因此显示方式如下:
select
v.olocation,
max(case DATEPART(weekday, b.BookingDt) When 1 then 'x' else '' end) Sun,
max(case DATEPART(weekday, b.BookingDt) When 2 then 'x' else '' end) Mon,
max(case DATEPART(weekday, b.BookingDt) When 3 then 'x' else '' end) Tue,
max(case DATEPART(weekday, b.BookingDt) When 4 then 'x' else '' end) Wed,
max(case DATEPART(weekday, b.BookingDt) When 5 then 'x' else '' end) Thu,
max(case DATEPART(weekday, b.BookingDt) When 6 then 'x' else '' end) Fri,
max(case DATEPART(weekday, b.BookingDt) When 7 then 'x' else '' end) Sat
from
(
select distinct v.olocation , b.BookingDt
from oVenue V
LEFT JOIN tblBookings B on B.VenueID=V.oID
and DATEPART( wk, b.BookingDt )='44'
and DATEPART( yy, b.BookingDt )='2009'
) selweek
group by v.olocation
如何显示数据应该是前端问题,而不是数据库问题。我不会把注意力集中在把"x"放在一个特定的位置上。返回您的应用程序需要填充日历的数据,并让前端完成此操作。
也就是说,为了创建您正在寻找的结果,您丢失了一组数据-日历天数集。您可以使用数据库中的临时表、CTE或永久表来实现这一点,但是您基本上需要一个表,它将所讨论的所有日期作为结果集提供给您。然后,您可以将该表中的LEFT OUTER JOIN
添加到预订表中,并使用CASE
根据是否找到匹配的预订行来填充值。