У меня есть подзапрос, который суммирует дни, в которые листинг был активен. У этих списков есть 3 различных приоритета, которые мы хотим проанализировать отдельно. Подзапросы работают нормально, но мне приходится повторяться 3 раза, и я не могу не чувствовать, что кто-то может указать мне более элегантное направление.
Я ищу что-то вроде
Declare @Priorities text = ['H','M','L']
Foreach(priority in priorities)
(SELECT SUM(
CASE
WHEN(jlh_inner.StartDate IS NULL) THEN 0
WHEN(jlh_inner.EndDate IS NULL) THEN
DATEDIFF(dd, jlh_inner.StartDate, GETDATE())
ELSE
DATEDIFF(dd, jlh_inner.StartDate, jlh_inner.EndDate)
END)
FROM ListingHistory jlh_inner
WHERE jlh_inner.JobTitleId = jlh.JobTitleId
AND jlh_inner.OfficeCode = rof.code
AND jlh_inner.Priority = priority)
Полный код прямо сейчас:
BEGIN
SELECT rof.location AS location,
jlh.TitleId AS TitleId,
jt.Title AS Title,
(SELECT SUM(
CASE
WHEN(jlh_inner.StartDate IS NULL) THEN 0
WHEN(jlh_inner.EndDate IS NULL) THEN
DATEDIFF(dd, jlh_inner.StartDate, GETDATE())
ELSE
DATEDIFF(dd, jlh_inner.StartDate, jlh_inner.EndDate)
END)
FROM ListingHistory jlh_inner
WHERE jlh_inner.JobTitleId = jlh.JobTitleId
AND jlh_inner.OfficeCode = rof.code
AND jlh_inner.Priority = 'H') AS HighPriorityDays,
(SELECT SUM(
CASE
WHEN(jlh_inner.StartDate IS NULL) THEN 0
WHEN(jlh_inner.EndDate IS NULL) THEN
DATEDIFF(dd, jlh_inner.StartDate, GETDATE())
ELSE
DATEDIFF(dd, jlh_inner.StartDate, jlh_inner.EndDate)
END)
FROM ListingHistory jlh_inner
WHERE jlh_inner.JobTitleId = jlh.JobTitleId
AND jlh_inner.OfficeCode = rof.code
AND jlh_inner.Priority = 'M') AS MediumPriorityDays,
(SELECT SUM(
CASE
WHEN(jlh_inner.StartDate IS NULL) THEN 0
WHEN(jlh_inner.EndDate IS NULL) THEN
DATEDIFF(dd, jlh_inner.StartDate, GETDATE())
ELSE
DATEDIFF(dd, jlh_inner.StartDate, jlh_inner.EndDate)
END)
FROM ListingHistory jlh_inner
WHERE jlh_inner.JobTitleId = jlh.JobTitleId
AND jlh_inner.OfficeCode = rof.code
AND jlh_inner.Priority = 'L') AS LowPriorityDays
FROM Offices rof,
ListingHistory jlh,
JobTitle jt
WHERE rof.code = jlh.OfficeCode
AND jt.JobTitleID = jlh.JobTitleId
GROUP BY rof.location, rof.code, jlh.TitleId, jt.Title
ORDER BY location
END