大家好我有一张叫做预订的桌子(Ive用粗线对齐)
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
我有另一张名为Venues的桌子
oID oLocation oPitch
1 Left Park Rugby
2 Right Park Rugby
表格由Venues.oID = bookings .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和Date,我希望它检查一下是否存在该日期,如果是这样的话,将x放在其他位置,将其置于其位置。
不确定最佳方式。 非常感谢任何帮助。
提前致谢
答案 0 :(得分:2)
由于您已经在查询中限制了周和年,因此这是显示它的方式:
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
答案 1 :(得分:1)
数据的显示方式应该是前端问题,而不是数据库问题。我不会专注于将“x”放在特定位置的事情。返回您的应用程序需要填写日历的数据,并让前端执行该操作。
那就是说,为了创建你想要的结果,你错过了一组数据 - 日历天数。您可以使用数据库中的临时表,CTE或永久表来执行此操作,但您基本上需要一个表格,该表格可以为您提供所有相关日期作为结果集。然后,您可以LEFT OUTER JOIN
从该表格到您的预订表格,并使用CASE
根据是否找到匹配的预订行来填写值。