Я хотел бы знать, есть ли лучший способ написания предложения SELECT
в запросе ниже.Есть три возможных случая для status
.Он может иметь значение «A», «N» или нуль.
Я думаю, что размещение AND status = 'A'
в предложении where является избыточным, когда вы сравниваете значения subTable со значением «A».Есть ли способ, которым это можно было бы переписать более эффективно?Я чувствую, что ограничение статуса в предложении WHERE
всегда будет давать вам 'A' и, следовательно, бессмысленно делать оператор CASE
.
ALTER VIEW dbo.st_review_status_vw AS
(
SELECT c.st_id, c.ms_price_comp_fy,
CASE
WHEN (SELECT status FROM
(SELECT st_id, status, ms_price_comp_fy
FROM ms_price_comp
WHERE st_id = c.st_id
AND ms_price_comp_fy = c.ms_price_comp_fy
AND status = 'A'
GROUP BY st_id, status, ms_price_comp_fy)
AS subTable) = 'A' THEN 'C'
ELSE 'I'
END AS status,
MAX(date_approved) AS date_completed
FROM ms_price_comp AS c
GROUP BY c.st_id, c.ms_price_comp_fy
)