То, что вы выглядите для описания, таково:
SELECT COUNT(sb1.prop) AS PROP1,
COUNT(sb2.prop) AS PROP2
FROM (SELECT * FROM TABLE t WHERE t.prop LIKE '%SOMETHING%') AS sb1
CROSS APPLY (SELECT * FROM TABLE t WHERE t.prop LIKE '%SOMETHING ELSE%') AS sb2;
Это, однако, не вернет результаты, к которым вы стремитесь (и PROP1
, и PROP2
будутимеют одинаковое значение). То, что приведено выше, фактически совпадает с:
SELECT COUNT(*) AS PROP1,
COUNT(*) AS PROP2
FROM TABLE t1
CROSS JOIN TABLE t2
WHERE t1.prop LIKE '%SOMETHING%'
AND t2.prop LIKE '%SOMETHING ELSE%';
Это можно решить, выполнив агрегацию в подзапросе:
SELECT (SELECT COUNT(*) FROM TABLE t WHERE t.prop LIKE '%SOMETHING%') AS PROP1,
(SELECT COUNT(*) FROM TABLE t WHERE t.prop LIKE '%SOMETHING ELSE%') AS PROP2;
Однако, учитывая, что это одна и та же таблица, вам лучше использовать агрегат условий:
SELECT COUNT(CASE WHEN t.prop LIKE '%SOMETHING%' THEN 1 END) AS PROP1,
COUNT(CASE WHEN t.prop LIKE '%SOMETHING ELSE%' THEN 1 END) AS PROP2
FROM TABLE t;