Reputation: 339
I have a query as below:
SELECT tr.AccountFK ,
TransactionRequestStatus = CASE
WHEN tr.TransactionRequestStatusFK = 2 THEN 'Accepted'
ELSE 'Rejected'
END,
tr.TransactionRequestID
FROM [CRM].[acc].[TransactionRequest] as tr
INNER JOIN CRM.acc.TransactionRequestHistory as trh
ON tr.TransactionRequestID = trh.TransactionRequestFK
where tr.TransactionRequestTypeFK = 3 --bill split
and TransactionRequestStatusFK in (2, 3) --Approved, Rejected
--Filter- on each item
and (tr.TransactionRequestStatusFK = 2 and tr.TransactionRequestID not in (select tr.TransactionRequestID from crm.acc.TransactionRequest tr
INNER JOIN CRM.acc.TransactionRequestHistory as trh
ON tr.TransactionRequestID = trh.TransactionRequestFK
where tr.TransactionRequestID = trh.TransactionRequestFK
and trh.EventFK = 15)
or
tr.TransactionRequestStatusFK = 3 and tr.Notes not like '%No Action%')
group by tr.AccountFK, tr.TransactionRequestStatusFK, tr.TransactionRequestID
I have a subquery in the where clause to apply a filter on each item but this subquery join is the same has the join in the main query, is there any way to re-use the main query table and avoid repeating same code in the subquery.
Upvotes: 1
Views: 768
Reputation: 1845
Using CTE
. Assuming the column names in both crm.acc.TransactionRequest
and CRM.acc.TransactionRequestHistory
are distinct, the following should work. If they aren't, then you'll have to specify the columns with their alias in the Select
of cte.
with cte as
(select * from crm.acc.TransactionRequest tr
INNER JOIN CRM.acc.TransactionRequestHistory as trh
ON tr.TransactionRequestID = trh.TransactionRequestFK)
SELECT AccountFK ,
TransactionRequestStatus = CASE
WHEN TransactionRequestStatusFK = 2 THEN 'Accepted'
ELSE 'Rejected'
END,
TransactionRequestID
FROM cte
where TransactionRequestTypeFK = 3 --bill split
and TransactionRequestStatusFK in (2, 3) --Approved, Rejected
--Filter- on each item
and (TransactionRequestStatusFK = 2 and TransactionRequestID not in
(select TransactionRequestID from cte
where TransactionRequestID = TransactionRequestFK
and EventFK = 15)
or
TransactionRequestStatusFK = 3 and Notes not like '%No Action%')
group by AccountFK, TransactionRequestStatusFK, TransactionRequestID
Upvotes: 1