PDA

View Full Version : دستور T-SQL برای رزرو اتاق



Davood_amega
یک شنبه 02 آبان 1389, 10:26 صبح
سلام پیشاپیش از همه دوستان تشکر
برای دستور T-SQL برای تشخیص رزرو بودن اتاق دچار مشکل شده ام . دو تا جدول دارم .
اتاقها : شماره اتاق (R_ID)
وضعیت اتاقها : اتاق رزرو شده (RS_Room_ID) و تاریخ ورود و تاریخ خروج
رزرو : فرد رزرو کننده

http://barnamenevis.org/forum/attachment.php?attachmentid=58944&stc=1&d=1287904923

در جدول وضعیت اتاقها امکان دارد یک اتاق در چند تاریخ رزرو شود . حالا یک SP نوشتم که دو تا تاریخ می گیرد که اگر در آن بین آن دو تاریخ اتاقی رزرو بود آن اتاق را نشان ندهد . Join این جداول به چه صورت است ؟
چون وقتی Join می کنم مثلا برای اتاق 108 امکان دارد 3 بار پر شده باشد و در یک سطر رزرو شده ولی دو سطر دیگر در آن تاریخ نباشد . ولی اتاق را به همین دلیل بر می گرداند .

Rezahak
یک شنبه 02 آبان 1389, 10:33 صبح
سلام
در دستور select خودتون يك عبارت DISTINCT ناقابل اضافه بفرماييد

Davood_amega
یک شنبه 02 آبان 1389, 11:13 صبح
دوست عزیز مشکل Distinct نیست . با مثال توضیح میدم .

http://barnamenevis.org/forum/attachment.php?attachmentid=58949&stc=1&d=1287907382

اگه ما تاریخ 2010-10-9 تا 2010-10-15 را بدم باید 103 , 104 را فقط برگردونه .در حالی که سطر دوم را هم برمی گردونه! فکر کنم Group By مشکلو حل کنه اما نمیدونم چه جوری ازش استفاده کنم .

Rezahak
یک شنبه 02 آبان 1389, 11:38 صبح
SELECT DISTICT RoomNo FROM tbl WHERE (EntDate<=@EntDate AND ExDate>=@EntDate)OR(EntDate<=@ExDate AND ExDate>=@ExDate)OR(@EntDate<=EntDate AND @ExDate>=ExDate)

فكر نمي كنم حالت ديگري بمونه

Reza_Yarahmadi
یک شنبه 02 آبان 1389, 12:39 عصر
چيزي كه به نظر من ميرسه اينه كه اول ليست اتاقهايي كه بين اون تاريخ رزرو شده اند رو پيدا كنيد بعد اتاقهايي كه توي ليست نيستند رو بدست بياريد.
چيزي شبيه كد زير

With Reserved as
(
Select
Distinct RS_Rooms_ID as ID
From
Rooms_State rs
Where
(rs.RS_Entry_Date < @Date1 AND rs.RS_Exit_Date > @Date1)
OR
(rs.RS_Entry_Date > @Date1 AND rs.RS_Entry_Date < @Date2)
)
Select * From Room Where R_ID NOT IN (Select ID From Reserved)

Davood_amega
یک شنبه 02 آبان 1389, 12:40 عصر
ممنون Rezahak عزیز
اما مشکل همچنان برقراره !
در رزرو اگه مثلا اتاق 108 در اون بازه بود یعنی اتاق رزرو بود دیگه باید سطرهای که اتاق 108 را دارند را باید چک نکند . در این کد این کار انجام نمیشه !

حمیدرضاصادقیان
دوشنبه 03 آبان 1389, 10:23 صبح
سلام. این کد رو تست کنید ببینید جواب میگیرید یا خیر.


select rs_room_id from rooms_state
where rs_room_id not in(select rs_room_id from rooms_state where rs_entry_Date>2010-10-09 and rs_exit_date<2010-10-15)