Помощь в перекрестном соединении при создании календаря на неделю - PullRequest
0 голосов
/ 15 сентября 2011

Привет всем, у меня есть таблица, которая называется "брони", как это (я выделил столбцы для выравнивания)

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 = бронирования .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 на его место, а в другом месте ставьте ''.

Не уверен, что лучший способ продолжить. Любая помощь очень ценится.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Поскольку вы уже ограничили неделю и год в своем запросе, вот как это отобразить:

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 голос
/ 16 сентября 2011

Способ отображения данных должен быть проблемой внешнего интерфейса, а не проблемой базы данных.Я бы не стал концентрироваться на таких вещах, как «х» в определенном месте.Верните данные, которые необходимо приложить для заполнения календаря, и попросите интерфейс сделать это.

При этом для создания результатов, подобных тому, что вы ищете, вам не хватает набораданные - набор календарных дней.Вы можете сделать это с помощью временной таблицы, CTE или постоянной таблицы в вашей базе данных, но в основном вам нужна таблица, которая дает вам все рассматриваемые дни в качестве набора результатов.Затем вы можете LEFT OUTER JOIN из этой таблицы в таблицу заказов и использовать CASE для заполнения значений в зависимости от того, была ли найдена соответствующая строка заказов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...