2017-12-08 7 views
0

を数える参加私は日付が「2017年12月8日」で、座ったすべての予約の数を取得したい= 1または支払がSQL Serverの左

nullでなく、このサンプルコード

create table #Reservation 
(id int identity(1,1), 
name varchar(50) 
); 

create table #Reservation_details 
(id int identity(1,1), 
reservation_id int, 
reservation_date date, 
seated tinyint 
); 

create table #Payment 
(id int identity(1,1), 
reservation_id int, 
payment decimal(18,2) 
); 

insert into #Reservation(name) 
values ('Spiderman'),('Superman'),('Batman'),('Hulk'); 

insert into #Reservation_details(reservation_id,reservation_date,seated) 
values (1,'2017-12-07',0),(2,'2017-12-08',0),(3,'2017-12-08',1),(4,'2017-12-08',0); 

insert into #Payment(reservation_id,payment) 
values(1,220),(2,1000) 

select 
A.id, 
A.name, 
B.reservation_date, 
B.seated, 
C.payment 
from #Reservation A 
inner join #Reservation_details B 
on B.reservation_id = A.id 
left join #Payment C 
on C.reservation_id = B.reservation_id 
where reservation_date = '2017-12-08' 

drop table #Reservation 
drop table #Reservation_details 
drop table #Payment 

を得ました

私は日付が「2017年12月8日」と座っ= 1または支払が ないヌル

ここで入れてみましたが、代わりに、それはどのようにどこカウントとして使うのですかも私に過去の日付を示しましたか?

+0

おそらくブール式にかっこが必要です。 –

+0

の後に? – GGw

+0

'Reservation'と' Reservation_details'は1-1の関係にありますか? –

答えて

2

は、私はあなたがOR操作用ブラケット(condition1 OR condition2)を使用することを忘れてしまったと思います

select COUNT(*) 
from #Reservation A 
inner join #Reservation_details B on B.reservation_id = A.id 
left join #Payment C on C.reservation_id = B.reservation_id 
where reservation_date = '2017-12-08' 
    and (B.seated=1 or C.payment is not null) 

それを試してみてください。あなたはブラケットを使用しない場合は、その後

reservation_date = '2017-12-08' and B.seated=1 or C.payment is not null 

は、以下の

あなたはでCOUNT関数を使用することができます
(reservation_date = '2017-12-08' and B.seated=1) or C.payment is not null 
1
select 
A.id, 
A.name, 
B.reservation_date, 
B.seated, 
C.payment 
from (#Reservation A 
inner join #Reservation_details B 
on B.reservation_id = A.id 
left join #Payment C 
on C.reservation_id = B.reservation_id) 
where B.reservation_date = '2017-12-08' 
AND (B.seated =1 or C.payment is null) 

に等しいあなたのケースではhttps://docs.microsoft.com/en-us/sql/t-sql/language-elements/operator-precedence-transact-sql

-

は、演算子の優先順位を参照してください。 WHERE句でHAVINGを使用すると、最後の文でなければならず、GROUP BY句

関連する問題