Мой вопрос немного похож на этот вопрос, но с оговоркой. В моем случае условия зависят от разных таблиц, а не от одной таблицы. Часть, которая доставляет мне неприятности, это часть GROUP BY
. Вот запрос:
SELECT
CASE
WHEN T1.ImportantColumn = 'Y'
THEN 'Good'
ELSE
CASE
WHEN T2.ImportantColumn = 1
THEN 'Very Good'
ELSE
CASE
WHEN T3.ImportantColumn IS NULL
THEN 'Bad'
ELSE T3.ImportantColumn
END
END
END AS WorkStatus,
SUM(case when T2.sex = 'M' THEN 1 ELSE 0 END) male ,
SUM(case when T2.sex = 'F' THEN 1 ELSE 0 END) female ,
COUNT(WorkStatus) AS [CountWorkStatus]
FROM
Condition1Table T1
RIGHT JOIN Condition2Table T2 ON T1.city = T2.Code_id AND T1.field_name = 'cities'
INNER JOIN Condition3Table T3 ON T2.student_id = T3.student_id
GROUP BY T3.ImportantColumn, T2.ImportantColumn, T1.ImportantColumn -- <-- wrote this but I know it's wrong
Это своего рода сценарий IF ELSE. Если Condition1Table.ImportantColumn равно 'Y', то 'Хорошо', иначе, если Condition2Table.ImportantColumn равно 1, тогда 'Очень хорошо', иначе, если Condition3Table.ImportantColumn равно NULL, затем 'bad', иначе значение в Condition3Table.ImportantColumn . Сложной частью является группировка данных в желаемом формате, который указан ниже:
WorkStatus | male | female | CountWorkStatus
---------- ----- ------ ---------------
Good | 3 | 7 | 10
Very Good | 11 | 2 | 13
Bad | 5 | 0 | 5
Val1 | 1 | 9 | 10
Val2 | 41 | 23 | 64