I have to get all count for all orders, which was passed to query, even for null. I have developed such kind of query in SQL Server 2008R2:
SELECT COUNT(UserId), b.OrderId
FROM @OrderList b
LEFT JOIN
(
SELECT DISTINCT pat_base.UserId, prov_list.OrderId
FROM Users pat_base
LEFT JOIN Assetments hlth_asmt ON hlth_asmt.UserId = pat_base.UserId
AND hlth_asmt.Date BETWEEN @StartDate AND @EndDate
LEFT JOIN Logs proc_log ON proc_log.UserId = pat_base.UserId
AND proc_log.PLDATE BETWEEN @StartDate AND @EndDate
LEFT JOIN Encounter med_enc_log ON med_enc_log.UserId = pat_base.UserId
AND med_enc_log.EncounterDate BETWEEN @StartDate AND @EndDate
LEFT JOIN @OrderList prov_list ON
hlth_asmt.OrderId = prov_list.OrderId
OR proc_log.OrderId = prov_list.OrderId
OR med_enc_log.OrderId = prov_list.OrderId
WHERE hlth_asmt.UserId IS NOT NULL
OR proc_log.UserId IS NOT NULL
OR med_enc_log.UserId IS NOT NULL
) a ON a.OrderId=b.OrderId
GROUP BY b.OrderId
If I remove joined subquery, order is being cut with many-to-many relation. Is it possible to replace subquery with join?
P.S. Here is output now:
OrderId
----------- -----------
8 10001
0 10003
Output without subquery:
OrderId
----------- -----------
8 10001
you have to change
to
if you use left join you filter out orders wich are in @OrderList but dont have expected user
so the query would be like
edit
yeah, that means that those rows were filtered out in where clause
change it to
but i think what it means, is that you have inconsistent data within db