PDA

View Full Version : کمک در نوشتن Query



Hadi-Hashemi
پنج شنبه 05 دی 1392, 14:43 عصر
سلام دوستان

من یه مشکلی تو نوشتن این برنامه دارم. از دوستان میخوام کمک کنن.

به شکل زیر نیگاه کنین:

شکل (http://u1312.hizliresim.com/1j/u/vwlz0.png)

من میخوام اتاقهایی که بین تاریخهای 2013-02-19 و 2013-02-25 خالی هستن رو بیاره.

همونطور که تو شکل میبینید هر سه اتاق تو اون تاریخ ها خالی هستن.

یا مثلا اتاقهایی که بین تاریخهای 2013-03-16 و 2013-03-19 خالی هستن رو بیاره.

همونطور که تو شکل میبینید فقط اتاقهای 102 و 103 تو اون تاریخ ها خالی هستن.


با تشکر

( لطفا هر چی به ذهنتون میرسه بنویسین, شاید جمله های کوتاه شما کمک بزرگی به من بکنه )

amir20611
پنج شنبه 05 دی 1392, 15:21 عصر
سلام ، فکر کنم این کار کنه

declare @tbl table (room nvarchar(50),in_ datetime,out_ datetime)
insert into @tbl values ('102','2014/01/01','2014/01/20'),
('102','2014/02/02','2014/02/15'),
('101','2014/03/15','2014/03/18'),
('101','2014/03/20','2014/03/28'),
('101','2014/04/05','2014/04/15'),
('103','2014/04/01','2014/04/04')
declare @Date1 datetime ='2014/02/19',@Date2 datetime ='2014/02/25'
select room from @tbl where room not in (select room from @tbl where in_<=@Date1 and out_>=@Date2) group by room

Hadi-Hashemi
پنج شنبه 05 دی 1392, 15:47 عصر
امیر جان ممنون از پاسخت.

ولی باز یه مشکلی هست من وقتی Date1 رو برابر '2014/02/14' قرار میدم باز هم اتاق 102 رو میاره که نباید بیاره :ناراحت:




declare @tbl table (room nvarchar(50),in_ datetime,out_ datetime)
insert into @tbl values ('102','2014/01/01','2014/01/20'),
('102','2014/02/02','2014/02/15'),
('101','2014/03/15','2014/03/18'),
('101','2014/03/20','2014/03/28'),
('101','2014/04/05','2014/04/15'),
('103','2014/04/01','2014/04/04')
declare @Date1 datetime ='2014/02/14',@Date2 datetime ='2014/02/25'
select room from @tbl where room not in (select room from @tbl where in_<=@Date1 and out_>=@Date2) group by room

amir20611
پنج شنبه 05 دی 1392, 16:07 عصر
برای شرطت اینو بذار

in_<=@Date1 and out_>=@Date1 or in_<=@Date2 and out_>=@Date2

Hadi-Hashemi
پنج شنبه 05 دی 1392, 16:13 عصر
دستت طلا امیر جان :تشویق:

Hadi-Hashemi
جمعه 06 دی 1392, 03:21 صبح
امیر جان دستم به دامنت :خجالت:


باز یه مشکلی هست من وقتی Date1 رو برابر '2014/04/03' و Date2 رو برابر '2014/04/20' قرار میدم اتاق 101 رو میاره که نباید بیاره.

( بخاطر سطر یکی مونده به آخر جدول )

fakhravari
جمعه 06 دی 1392, 10:00 صبح
declare @tbl table (room nvarchar(50),in_ datetime,out_ datetime)
insert into @tbl values
(N'102',N'2014/01/01',N'2014/01/20'),
(N'102',N'2014/02/02',N'2014/02/15'),
(N'101',N'2014/03/15',N'2014/03/18'),
(N'101',N'2014/03/20',N'2014/03/28'),
(N'101',N'2014/04/05',N'2014/04/15'),
(N'103',N'2014/04/01',N'2014/04/04')
declare @Date1 datetime =N'2014/02/14',@Date2 datetime =N'2014/02/25'
select room from @tbl where room NOT in (select room from @tbl where [in_] BETWEEN @Date1 and out_) group by room

amir20611
جمعه 06 دی 1392, 10:26 صبح
declare @tbl table (room nvarchar(50),in_ datetime,out_ datetime)
insert into @tbl values ('102','2014/01/01','2014/01/20'),
('102','2014/02/02','2014/02/15'),
('101','2014/03/15','2014/03/18'),
('101','2014/03/20','2014/03/28'),
('101','2014/04/05','2014/04/15'),
('103','2014/04/01','2014/04/04')
declare @Date1 datetime ='2014/04/03',@Date2 datetime ='2014/04/20'
select room from @tbl where
room not in (select room from @tbl where in_<=@Date1 and out_>=@Date1 or
in_<=@Date2 and out_>=@Date2 or
in_>=@Date1 and out_<=@Date2) group by room

Hadi-Hashemi
شنبه 07 دی 1392, 04:22 صبح
declare @tbl table (room nvarchar(50),in_ datetime,out_ datetime)
insert into @tbl values
(N'102',N'2014/01/01',N'2014/01/20'),
(N'102',N'2014/02/02',N'2014/02/15'),
(N'101',N'2014/03/15',N'2014/03/18'),
(N'101',N'2014/03/20',N'2014/03/28'),
(N'101',N'2014/04/05',N'2014/04/15'),
(N'103',N'2014/04/01',N'2014/04/04')
declare @Date1 datetime =N'2014/02/14',@Date2 datetime =N'2014/02/25'
select room from @tbl where room NOT in (select room from @tbl where [in_] BETWEEN @Date1 and out_) group by room

با تشکر از جوابتون - فقط یه مشکلی هست:

وقتی Date1 رو برابر 2014/01/02 و Date2 رو برابر 2014/01/25 قرار میدم اتاق 103 رو که باید بیاره رو نمیاره.

Hadi-Hashemi
شنبه 07 دی 1392, 04:23 صبح
declare @tbl table (room nvarchar(50),in_ datetime,out_ datetime)
insert into @tbl values ('102','2014/01/01','2014/01/20'),
('102','2014/02/02','2014/02/15'),
('101','2014/03/15','2014/03/18'),
('101','2014/03/20','2014/03/28'),
('101','2014/04/05','2014/04/15'),
('103','2014/04/01','2014/04/04')
declare @Date1 datetime ='2014/04/03',@Date2 datetime ='2014/04/20'
select room from @tbl where
room not in (select room from @tbl where in_<=@Date1 and out_>=@Date1 or
in_<=@Date2 and out_>=@Date2 or
in_>=@Date1 and out_<=@Date2) group by room



:تشویق: ایندفعه عالی شد. خیلی ممنون