帮助交叉连接创建周视图日历



大家好,我有一个名为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根据是否找到匹配的预订行来填充值。

最新更新