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

Откуда: Планета Земля
Сообщений: 42
Написал запрос:

select Site_name, COUNT (Status_site) as Num_contract from
(select Site.SiteID as Site_ID, Contract.Status as Status_site, Site.Code as Site_name from Site 
inner join Contract on Site.SiteID = Contract.SiteID 
and Created between Getdate() - 365 and Getdate()
and Contract.Status = 3) t group by Site_name;


То есть я имею две колонки - Название компании и во второй сколько за последнйи год мы имеем закрытых с ними контрактов. Все работает, но задача.

Автоматически раскидать помесячно, то бы текущий месяц (Март к примеру) и назад на 12 месяцев (Getdate() - 365) - но было 12 колонок(с марта 2015 по март 2014).....

Есть ли вариант автоматом это сделать???

Модератор: Тема перенесена из форума "Другие СУБД".


Сообщение было отредактировано: 26 мар 15, 16:23
26 мар 15, 15:32    [17435652]     Ответить | Цитировать Сообщить модератору
 Re: Раскидать запрос по месячно  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4901
Mc Doc,

GROUP BY Site_name, CONVERT(CHAR(7), Created , 121)
26 мар 15, 16:27    [17436051]     Ответить | Цитировать Сообщить модератору
 Re: Раскидать запрос по месячно  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Mc Doc
но было 12 колонок

PIVOT
26 мар 15, 16:49    [17436159]     Ответить | Цитировать Сообщить модератору
 Re: Раскидать запрос по месячно  [new]
Mc Doc
Member

Откуда: Планета Земля
Сообщений: 42
Не совсем понял, сиснтаксиса...

GROUP BY Site_name, CONVERT(CHAR(7), Created , 121)

Created - тут условие вписывается? Так как сразу выдает ошибку. Но и после вписания условия тоже ишибку выдает.

select Site_name, COUNT (Status_site) as Num_tick from
(select Site.SiteID as Site_ID, Ticket.Status as Status_site, Site.Code as Site_name from Site 
inner join Ticket on Site.SiteID = Ticket.SiteID 
and Created between Getdate() - 365 and Getdate()
and ticket.Status = 3) t group by Site_name, CONVERT (CHAR(7), Created , 121);


Я 500% недопонял идеи.... поясните.
26 мар 15, 16:53    [17436188]     Ответить | Цитировать Сообщить модератору
 Re: Раскидать запрос по месячно  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Mc Doc,

Ошибка, потому что подзапрос не возвращает поле Created.
В результате оно неизвестно снаружи.
А вообще, много в Вашем запросе говнокода...
Например, почему 365, а не 366?
26 мар 15, 16:56    [17436213]     Ответить | Цитировать Сообщить модератору
 Re: Раскидать запрос по месячно  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4901
iap
Mc Doc,

Ошибка, потому что подзапрос не возвращает поле Created.
В результате оно неизвестно снаружи.
А вообще, много в Вашем запросе говнокода...
Например, почему 365, а не 366?


Может
DATEADD(YEAR, -1,  CREATED)


CONVERT(CHAR(7), Created , 121) -- это 2014-07 2015-02 -- один месяц , а как использовать это дальше смотрите. PIVOT сделать например
26 мар 15, 16:59    [17436229]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить