Помимо использования производной таблицы / внешнего запроса в качестве Дейла, как показано, вы также можете использовать CROSS APPLY
SELECT Menu.id, numBananas
FROM Menu
CROSS APPLY
(
select count(*)
from (
values (Menu.item1), (Menu.item2), (Menu.item3)
) as v(col)
where v.col = 'banana'
) bananacount (numBananas)
where numBananas = 2
Кстати, ваш исходный запрос v(col)
не верен.Я думаю, что это должно быть так
from (
values (Menu.item1), (Menu.item2), (Menu.item3)
) as v(col)
Или, если вы предпочитаете CTE
подход
; with cte as
(
SELECT Menu.id,
(
select count(*)
from (
values (Menu.item1), (Menu.item2), (Menu.item3)
) as v(col)
where v.col = 'banana'
) as numBananas
FROM Menu
)
select *
from cte
WHERE numBananas = 2