2011-09-15 20 views
0

こんにちは私はテーブルが(アイブが整列する列を太字)このような予約を呼ばれているすべての作成に参加ヘルプは、週表示のカレンダー

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 

と呼ばれる別のテーブルを持っていますテーブルはVenues.oID =予約によって相互結合されている私は、このような本

としてテーブルを作りたい

を.CustID

oID oSun oMon oTue oWed oThu oFri oSat 

1 x   x x   x 
2 x x   x x x x x 

X列=曜日 Y列=場所は、私は私がクロスの予約データベース

例:

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を行いますそして日付、私はそれがその場所に他の賢明な場所の場所に斧を置く場合、その日付がそこにあるかどうかを確認するチェックをしたい。

続行する最善の方法は不明です。 何か助けがありがとうございます。フロントエンドの問題ではなく、データベースの問題であるべきデータが表示されているどのように事前

答えて

1

感謝。私は特定の場所に "x"を置くようなものには集中しません。アプリケーションがカレンダーに記入する必要があるデータを返し、フロントエンドでそのデータを返します。

あなたが探しているような結果を作成するには、一連のデータが欠落していると言えます。これは一時的なテーブル、CTE、またはデータベースの永久テーブルで行うことができますが、基本的には問題の日をすべて結果セットとして提供するテーブルが必要です。その表から予約テーブルにLEFT OUTER JOINを入力し、CASEを使用して、一致する予約行が見つかったかどうかに基づいて値を入力します。

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 
+0

あなたはCROSSはこのために、JOIN必要があるだろう、なぜ私はまだ明確ではありませんよ。適切な会場IDに予約を割り当てるには、LEFT JOINが必要です。 – Chris

+0

私も、私はOPの結果しか得ておらず、それに取り組んでいます。再利用、赤ちゃん! –

+0

:)指定したIDのCROSS JOINをLEFT JOINにすると、あなたの提案は望み通りになると思います。 – Chris

関連する問題