Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
relief Member Откуда: Сообщений: 1197 |
Есть такая таблица cityType, countryName в cityType может быть только 2 значения: 1 (больше миллиона) и 2 (меньше) нужно написать запрос чтобы получились countryName, MillionCitiesQty, LessMillionCitiesQty сервер 2005. предпочтительно это сделать без pivot |
20 май 15, 11:04 [17665370] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
relief, CASE |
20 май 15, 11:05 [17665372] Ответить | Цитировать Сообщить модератору |
Кролик-зануда
Guest |
можно еще суммировать 2-cityType и cityType-1 соответственно |
20 май 15, 11:10 [17665392] Ответить | Цитировать Сообщить модератору |
relief Member Откуда: Сообщений: 1197 |
понимаю, что кэйс, но получается покак только так select countryName, case when cityType = 1 then count(1) end as MillionCitiesQty, case when cityType = 2 then count(1) end as LessMillionCitiesQty from cities а тут получается по 2 строки на одну страну, а мне нужно в одной строке |
||
20 май 15, 11:11 [17665401] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А должно получиться наоборот - case внутри агрегатной функции |
||
20 май 15, 11:13 [17665411] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
select countryName, sum(case when cityType = 1 then 1 else 0 end) as MillionCitiesQty, sum(case when cityType = 2 then 1 else 0 end) as LessMillionCitiesQty from cities |
||||
20 май 15, 11:14 [17665418] Ответить | Цитировать Сообщить модератору |
angel_zar Member Откуда: Барнаул Сообщений: 902 |
? select countryName, SUM(case when cityType = 1 then count(1) end) as MillionCitiesQty, SUM(case when cityType = 2 then count(1) end) as LessMillionCitiesQty from cities GROUP BY countryName |
||
20 май 15, 11:16 [17665431] Ответить | Цитировать Сообщить модератору |
relief Member Откуда: Сообщений: 1197 |
получается 2 строки на каждую страну всё равно |
||||
20 май 15, 11:19 [17665451] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вы обманываете. Получается ошибка из-за отсутсnвия group by |
||
20 май 15, 11:21 [17665461] Ответить | Цитировать Сообщить модератору |
angel_zar Member Откуда: Барнаул Сообщений: 902 |
COUNT и не заметил Так select countryName, SUM(case when cityType = 1 then 1 else 0 end) as MillionCitiesQty, SUM(case when cityType = 2 then 1 else 0 end) as LessMillionCitiesQty from cities GROUP BY countryName |
||||
20 май 15, 11:21 [17665463] Ответить | Цитировать Сообщить модератору |
relief Member Откуда: Сообщений: 1197 |
не работает запрос Cannot perform an aggregate function on an expression containing an aggregate or a subquery. |
||||
20 май 15, 11:22 [17665470] Ответить | Цитировать Сообщить модератору |
relief Member Откуда: Сообщений: 1197 |
сорри, вариант Добрый Э - Эх и angel_zar работает. забыл из group by удалить лишний столбец спасибо |
20 май 15, 11:24 [17665483] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20960 |
SUM(COUNT()) - двойная группировка, недопустимо. |
20 май 15, 11:25 [17665490] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |