2016-03-07 4 views
0

У меня есть этот код, который при запуске должен возвращать подсчет общего количества Таксисные отелей и еда:Использование Sum на количество строк в SQL

SELECT 
    COUNT(CASE WHEN [TaxiHotelFood] LIKE '%Taxi%' THEN 1 END) AS "Taxis", 
    COUNT(CASE WHEN [TaxiHotelFood] LIKE '%Hotel%' THEN 1 END) AS "Hotel", 
    COUNT(CASE WHEN [TaxiHotelFood] LIKE '%Taxi%' THEN 1 END) AS "Food" 
    FROM [CSART].[dbo].[tblPatAdmission] 
    WHERE (TaxiHotelFood != '' AND TaxiHotelFood IS NOT NULL) 
    GROUP BY TaxiHotelFood 

Вместо того, что она возвращает это:

Taxis Hotel Food 
0   2  0 
1   1  1 

Он не добавляет счетчики, если содержимое поля не идентично. Есть ли простой способ исправить это?

+2

Можете ли вы предоставить образцы данных и ожидаемые результаты? Я не вижу ничего плохого в вашем запросе. Когда вы говорите 'add counts', вы имеете в виду, что вам нужна только одна строка в качестве результата (1, 3, 1)? Если это так, отбросьте 'group by ... – sgeddes

+0

Ничего себе, это не должно было занять меня больше часа, чтобы понять это. Спасибо, сейчас работает. – user1834616

+0

Вы заметили, что второй «% Taxi%» должен быть «% Food%»? –

ответ

0
SELECT 
COUNT(CASE WHEN [TaxiHotelFood] LIKE '%Taxi%' THEN 1 END) AS "Taxis", 
COUNT(CASE WHEN [TaxiHotelFood] LIKE '%Hotel%' THEN 1 END) AS "Hotel", 
COUNT(CASE WHEN [TaxiHotelFood] LIKE '%Taxi%' THEN 1 END) AS "Food" 
FROM [CSART].[dbo].[tblPatAdmission] 
WHERE (TaxiHotelFood != '' AND TaxiHotelFood IS NOT NULL) 
GROUP BY TaxiHotelFood 
UNION 
SELECT 
SUM(CASE WHEN [TaxiHotelFood] LIKE '%Taxi%' THEN 1 END) AS "Taxis", 
SUM(CASE WHEN [TaxiHotelFood] LIKE '%Hotel%' THEN 1 END) AS "Hotel", 
SUM(CASE WHEN [TaxiHotelFood] LIKE '%Taxi%' THEN 1 END) AS "Food" 
FROM [CSART].[dbo].[tblPatAdmission] 
WHERE (TaxiHotelFood != '' AND TaxiHotelFood IS NOT NULL) 
GROUP BY TaxiHotelFood