SELECT
SUM(IIF(c_type = "a", 1, 0)) AS Active,
SUM(IIF(c_type = "d", 1, 0)) AS Not_Active,
FROM customerDetail
WHERE c_type IN ("a", "d")
Это было для MS Access.
Каким-то образом я пропустил тег tsql
, когда впервые увидел этот вопрос. В Transact-SQL вы можете использовать конструкцию CASE, которую можно назвать более мощным эквивалентом IIF
в Access:
SELECT
SUM(CASE c_type WHEN 'a' THEN 1 ELSE 0 END) AS Active,
SUM(CASE c_type WHEN 'd' THEN 1 ELSE 0 END) AS Not_Active,
FROM customerDetail
WHERE c_type IN ('a', 'd')
На самом деле, в T-SQL я бы использовал COUNT вместо SUM, например:
SELECT
COUNT(CASE c_type WHEN 'a' THEN 1 END) AS Active,
COUNT(CASE c_type WHEN 'd' THEN 1 END) AS Not_Active,
FROM customerDetail
WHERE c_type IN ('a', 'd')
Здесь 1
в каждом выражении CASE может быть заменено на что угодно, если только оно не равно NULL (значения NULL не учитываются). Если часть ELSE опущена, как в запросе выше, подразумевается ELSE NULL
.