Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Andrey_KI Member Откуда: Сообщений: 22 |
Таблица содержит наименование карт, год окончания, номер карты. В одном запросе необходимо вывести информацию о количестве кредитных карт по годам истечения следующего характера Название (тип) кредитной карты, количество карт по годам 2005 год… 2008 год Пример: | Название | 2005 | 2006 | 2007 | … | SuperiorCard | 123 | 112 | 129 | Нарисовал такой запрос select CardType as 'Название карты', Case ExpYear when 2005 then COUNT(ExpYear) end as '2005', Case ExpYear when 2006 then COUNT(ExpYear) end as '2006', Case ExpYear when 2007 then COUNT(ExpYear) end as '2007', Case ExpYear when 2008 then COUNT(ExpYear) end as '2008' from Sales.CreditCard group by ExpYear, CardType order by ExpYear, CardType Но вот не то. ------------- Голову уже сломал. Может не по тому пути пошёл? К сообщению приложен файл. Размер - 18Kb |
29 май 17, 13:19 [20519856] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Andrey_KI, все верно, кроме одного - зачем вы по ExpYear то группируете? у вас и получается отдельная строка для каждого года. Уберите его из группировки, ну и из сортировки заодно, т.к. он там смысла не имеет. |
29 май 17, 13:23 [20519875] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
Andrey_KI, всё то. разворот осуществил, теперь ещё сгруппирую по верху правильно и будет как надо.... |
29 май 17, 13:24 [20519880] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Andrey_KI, ну и еще. Можно в качестве альтернативы перечислению CASE-ов использовать PIVOT. Научиться писать посложнее, зато потом быстрее использовать. |
29 май 17, 13:28 [20519892] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 940 |
Ага, а потом привыкнешь писать PIVOT, а тут бац, и 2008 на сервере... |
||
29 май 17, 13:30 [20519900] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
ну наверное 2005 всё таки |
||||
29 май 17, 13:38 [20519923] Ответить | Цитировать Сообщить модератору |
Andrey_KI Member Откуда: Сообщений: 22 |
Или что-то не так, или одно из двух. Если убрать ExpYear из группировки, то получаем
|
||||
29 май 17, 13:44 [20519939] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
Абсолютно бессмысленная приблуда. |
||||
29 май 17, 13:45 [20519944] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
а я про что? бессмысленная вообщем-то да, пользуюсь ну очень редко |
||||
29 май 17, 13:53 [20519973] Ответить | Цитировать Сообщить модератору |
Andrey_KI Member Откуда: Сообщений: 22 |
Minamoto, благодарю! Нарисовал при помощи PIVOT. А вот с CASE пока не разобрался. Всё-таки перерыв 2 года в практике ничего хорошего не несёт. |
29 май 17, 14:16 [20520062] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
В этом контексте правильно было бы "а тут бац, и 2000 на сервере". А не 2005 |
||||
29 май 17, 14:32 [20520122] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
SUM(CASE WHEN ... THEN [Field] ELSE 0 END)Для каждого поля запроса - своё условие WHEN. Всё очень просто и прозрачно. |
||
29 май 17, 14:34 [20520129] Ответить | Цитировать Сообщить модератору |
Andrey_KI Member Откуда: Сообщений: 22 |
iap, всё разобрался и с CASE. Спасибо! |
29 май 17, 16:23 [20520665] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |