sql server - How do I modify my SQL Query to take into account this specific filtering condition? -
i using sql query 2014 , have following t-sql query running against database:
use database select * ( select a.reservationstayid, c.pmsconfirmationnumber, a.staydate, datepart(month,a.staydate) 'month', datepart(year,a.staydate) 'year', c.[mth], a.packageplancode, c.[market segment code], c.[currencycode], a.rateamount, sum(a.rateamount) over(partition a.reservationstayid) 'cum_rate', d.[exchange rate], ((a.rateamount * d.[exchange rate])/1.15) 'pr', c.[propertycode], c.[room nights], c.[tour operator], c.[group booking id], c.[source of business], c.[booking origin (1)], c.[market final], c.[createdon], c.[createdon_rsd] reservationstaydate inner join (select * [reservationlist]) c on c.[reservationstayid] = a.reservationstayid , c.[mth] = datename(m,staydate) + ' ' + cast(datepart(yyyy,staydate) varchar) inner join (select * [pkgrevenue]) d on d.[reservationstayid] = a.reservationstayid , d.[staydate] = a.staydate c.[status] <> 'canceled' ) q q.cum_rate <> 0 order q.reservationstayid, q.staydate
the above query runs fine want include filter following reservationstayid
included in output: 152, 167, 658, 900
these reservationstayid
have cum_rate = 0
, meaning automatically excluded in output of existing query.
i've tried following did not work:
where (q.cum_rate <> 0 , q.reservationstayid in (152, 167, 658, 900))
how add specific condition?
here reasons why reservationstayid
s 152
, 167
, 658
, 900
do not appear on result:
- no rows on
reservationlist
,where status <> 'canceled'
- no matching rows on
pkgrevenue
to solve problem, may want turn inner join
s left join
. additionally, may want use case
expression in sum() over
clause. , instead of using and
in where
clause, should use or
select * ( select --..., sum(case when c.[status] <> 'cancelled' a.rateamount else 0 end ) over(partition a.reservationstayid) 'cum_rate', --... reservationstaydate left join reservationlist c on c.[reservationstayid] = a.reservationstayid , c.[mth] = datename(m, staydate) + ' ' + cast(datepart(yyyy,staydate) varchar) , c.[status] <> 'canceled' left join pkgrevenued on d.[reservationstayid] = a.reservationstayid , d.[staydate] = a.staydate ) q q.cum_rate <> 0 or q.reservationstayid in (152, 167, 658, 900) order q.reservationstayid, q.staydate
note: changed of join
s directly use table instead of using subquery , select * <table>
.
Comments
Post a Comment