Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вывод значения  [new]
Andrey_KI
Member

Откуда:
Сообщений: 13
Таблица содержит наименование карт, год окончания, номер карты.
В одном запросе необходимо вывести информацию о количестве кредитных карт по годам истечения следующего характера
Название (тип) кредитной карты, количество карт по годам 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]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значения  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Andrey_KI, все верно, кроме одного - зачем вы по ExpYear то группируете? у вас и получается отдельная строка для каждого года. Уберите его из группировки, ну и из сортировки заодно, т.к. он там смысла не имеет.
29 май 17, 13:23    [20519875]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значения  [new]
Добрый Э - Эх
Guest
Andrey_KI,

всё то. разворот осуществил, теперь ещё сгруппирую по верху правильно и будет как надо....
29 май 17, 13:24    [20519880]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значения  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Andrey_KI, ну и еще. Можно в качестве альтернативы перечислению CASE-ов использовать PIVOT. Научиться писать посложнее, зато потом быстрее использовать.
29 май 17, 13:28    [20519892]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значения  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Minamoto
Andrey_KI, ну и еще. Можно в качестве альтернативы перечислению CASE-ов использовать PIVOT. Научиться писать посложнее, зато потом быстрее использовать.

Ага, а потом привыкнешь писать PIVOT, а тут бац, и 2008 на сервере...
29 май 17, 13:30    [20519900]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Руслан Дамирович
Minamoto
Andrey_KI, ну и еще. Можно в качестве альтернативы перечислению CASE-ов использовать PIVOT. Научиться писать посложнее, зато потом быстрее использовать.

Ага, а потом привыкнешь писать PIVOT, а тут бац, и 2008 на сервере...

ну наверное 2005 всё таки
29 май 17, 13:38    [20519923]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значения  [new]
Andrey_KI
Member

Откуда:
Сообщений: 13
Minamoto
Andrey_KI, все верно, кроме одного - зачем вы по ExpYear то группируете? у вас и получается отдельная строка для каждого года. Уберите его из группировки, ну и из сортировки заодно, т.к. он там смысла не имеет.

Или что-то не так, или одно из двух.
Если убрать ExpYear из группировки, то получаем
автор
Столбец "Sales.CreditCard.ExpYear" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
29 май 17, 13:44    [20519939]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значения  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
TaPaK
Руслан Дамирович
пропущено...

Ага, а потом привыкнешь писать PIVOT, а тут бац, и 2008 на сервере...

ну наверное 2005 всё таки
В 2005 PIVOT как раз появился.
Абсолютно бессмысленная приблуда.
29 май 17, 13:45    [20519944]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
iap
TaPaK
пропущено...

ну наверное 2005 всё таки
В 2005 PIVOT как раз появился.
Абсолютно бессмысленная приблуда.

а я про что? бессмысленная вообщем-то да, пользуюсь ну очень редко
29 май 17, 13:53    [20519973]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значения  [new]
Andrey_KI
Member

Откуда:
Сообщений: 13
Minamoto, благодарю!
Нарисовал при помощи PIVOT. А вот с CASE пока не разобрался.
Всё-таки перерыв 2 года в практике ничего хорошего не несёт.
29 май 17, 14:16    [20520062]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значения  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
TaPaK
iap
пропущено...
В 2005 PIVOT как раз появился.
Абсолютно бессмысленная приблуда.

а я про что? бессмысленная вообщем-то да, пользуюсь ну очень редко
Говорилось, что "а тут бац, и 2008 на сервере".
В этом контексте правильно было бы "а тут бац, и 2000 на сервере".
А не 2005
29 май 17, 14:32    [20520122]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значения  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
Andrey_KI
Minamoto, благодарю!
Нарисовал при помощи PIVOT. А вот с CASE пока не разобрался.
Всё-таки перерыв 2 года в практике ничего хорошего не несёт.
SUM(CASE WHEN ... THEN [Field] ELSE 0 END)
Для каждого поля запроса - своё условие WHEN.
Всё очень просто и прозрачно.
29 май 17, 14:34    [20520129]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значения  [new]
Andrey_KI
Member

Откуда:
Сообщений: 13
iap, всё разобрался и с CASE.
Спасибо!
29 май 17, 16:23    [20520665]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить