Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

получить кол-во строк в результате выполнения закпроса SQL

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык
Предыдущая тема :: Следующая тема  
Автор Сообщение
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Вт Мар 05, 2013 08:14    Заголовок сообщения: получить кол-во строк в результате выполнения закпроса SQL Ответить с цитатой

Сделал отчет на основании выгрузки данных в Excel через QueryTable. Отчет работает но надо после вставки результата запроса добавить результирующую строку с итогом. Для этого надо знать сколько строк возвращает запрос.

Хотел сделать по такому принципу:
Код:

erroroff;
drop table ##tmp;
erroron;

create table ##tmp (id int identity(1,1),val int);
insert into ##tmp values (1),(2),(3),(4);

alias a := 'select * from ##tmp';
stable @tt a['];
return @tt:[x];

alias b:='2';
alias a := 'select * from ##tmp where val>b';
stable @tt a['];
return a;
return @tt:[x];

destroy @tt;
erroroff;
drop table ##tmp;
erroron;

Тут все работает.

В моей задаче формируется такая строка запроса:


Код:

alias _D_FROM :='2013-01-01';
alias _D_TO :='2013-03-31';

alias abv := 'SELECT
      ROW_NUMBER () over(order by pv.ssort,pv.nnumber,pv.Full_name),pv.Num_tab,pv.Full_Name,pv.Name_Appoint,pv.Struct_Name,[24157],[24158],[24159]
      FROM
      (
      SELECT
         pts.pt as Standart_id,
         year(sr.d_from)*12+MONTH(sr.d_from) as cmonth,
         pp.Num_Tab as Num_tab,
         cc.Full_Name as Full_Name,
         (select ap2.Name_appoint
            from Appointments ap2
            where ap2.Code_appoint =
               (select top 1 pr2.Code_Appoint
               from pr_current pr2
               where pr2.pId=sr.people_id and pr2.Date_trans<_D_TO and pr2.Date_depart>_D_FROM and pr2.Date_depart= (
               select max(Date_depart) from pr_current pr3 where pr3.pId=sr.people_id and pr3.Date_trans<_D_TO and pr3.Date_depart>_D_FROM
               ) ) ) as Name_Appoint,   
         (select Struct_name
            from Structs ss2
            where Struct_Code =
               (select top 1 pr2.Code_struct_name
               from pr_current pr2
               where pr2.pId=sr.people_id and pr2.Date_trans<_D_TO and pr2.Date_depart>_D_FROM and pr2.Date_depart= (
               select max(Date_depart) from pr_current pr3 where pr3.pId=sr.people_id and pr3.Date_trans<_D_TO and pr3.Date_depart>_D_FROM
               ) ) ) as Struct_Name,
         (select sort
            from Structs ss2
            where Struct_Code =
               (select top 1 pr2.Code_struct_name
               from pr_current pr2
               where pr2.pId=sr.people_id and pr2.Date_trans<_D_TO and pr2.Date_depart>_D_FROM and pr2.Date_depart= (
               select max(Date_depart) from pr_current pr3 where pr3.pId=sr.people_id and pr3.Date_trans<_D_TO and pr3.Date_depart>_D_FROM
               ) ) ) as ssort,
         (select cl2.number
            from cells cl2
            where cl2.Cell_item =
               (select top 1 pr2.Cell_item
               from pr_current pr2
               where pr2.pId=sr.people_id and pr2.Date_trans<_D_TO and pr2.Date_depart>_D_FROM and pr2.Date_depart= (
               select max(Date_depart) from pr_current pr3 where pr3.pId=sr.people_id and pr3.Date_trans<_D_TO and pr3.Date_depart>_D_FROM
               ) ) ) as nnumber,         
         sr.total as Total
      FROM
         user_standart_recipients sr
            inner join people pp on sr.people_id=pp.pid and pp.out_date>_D_FROM and pp.in_date<_D_TO
            inner join card cc on pp.Auto_Card=cc.Auto_Card
            inner join pr_current pr on sr.current_id=pr.prid and pr.Date_trans<_D_TO and pr.Date_depart>_D_FROM
            inner join user_standart_pts pts on pts.id=sr.standart_id
      WHERE
         sr.d_from<_D_TO and sr.d_to>_D_FROM
      ) tb
      PIVOT (
         sum(Total) FOR cmonth in ([24157],[24158],[24159])
      ) pv
      order by pv.ssort,pv.nnumber,pv.Full_name';

stable @tt abv['];
return @tt:[x];

destroy @tt;


При выполнении:



Подскажите в чем может быть ошибка?
_________________
return @@tMonth[%m]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Вт Мар 05, 2013 08:18    Заголовок сообщения: Ответить с цитатой

Если обработанный запрос выгрузить в файл и вставить в Managment Studio то запрос работает.

Код:

SELECT
      ROW_NUMBER () over(order by pv.ssort,pv.nnumber,pv.Full_name),pv.Num_tab,pv.Full_Name,pv.Name_Appoint,pv.Struct_Name,[24157],[24158],[24159]
      FROM
      (
      SELECT
         pts.pt as Standart_id,
         year(sr.d_from)*12+MONTH(sr.d_from) as cmonth,
         pp.Num_Tab as Num_tab,
         cc.Full_Name as Full_Name,
         (select ap2.Name_appoint
            from Appointments ap2
            where ap2.Code_appoint =
               (select top 1 pr2.Code_Appoint
               from pr_current pr2
               where pr2.pId=sr.people_id and pr2.Date_trans<'2013-03-31' and pr2.Date_depart>'2013-01-01' and pr2.Date_depart= (
               select max(Date_depart) from pr_current pr3 where pr3.pId=sr.people_id and pr3.Date_trans<'2013-03-31' and pr3.Date_depart>'2013-01-01'
               ) ) ) as Name_Appoint,   
         (select Struct_name
            from Structs ss2
            where Struct_Code =
               (select top 1 pr2.Code_struct_name
               from pr_current pr2
               where pr2.pId=sr.people_id and pr2.Date_trans<'2013-03-31' and pr2.Date_depart>'2013-01-01' and pr2.Date_depart= (
               select max(Date_depart) from pr_current pr3 where pr3.pId=sr.people_id and pr3.Date_trans<'2013-03-31' and pr3.Date_depart>'2013-01-01'
               ) ) ) as Struct_Name,
         (select sort
            from Structs ss2
            where Struct_Code =
               (select top 1 pr2.Code_struct_name
               from pr_current pr2
               where pr2.pId=sr.people_id and pr2.Date_trans<'2013-03-31' and pr2.Date_depart>'2013-01-01' and pr2.Date_depart= (
               select max(Date_depart) from pr_current pr3 where pr3.pId=sr.people_id and pr3.Date_trans<'2013-03-31' and pr3.Date_depart>'2013-01-01'
               ) ) ) as ssort,
         (select cl2.number
            from cells cl2
            where cl2.Cell_item =
               (select top 1 pr2.Cell_item
               from pr_current pr2
               where pr2.pId=sr.people_id and pr2.Date_trans<'2013-03-31' and pr2.Date_depart>'2013-01-01' and pr2.Date_depart= (
               select max(Date_depart) from pr_current pr3 where pr3.pId=sr.people_id and pr3.Date_trans<'2013-03-31' and pr3.Date_depart>'2013-01-01'
               ) ) ) as nnumber,         
         sr.total as Total
      FROM
         user_standart_recipients sr
            inner join people pp on sr.people_id=pp.pid and pp.out_date>'2013-01-01' and pp.in_date<'2013-03-31'
            inner join card cc on pp.Auto_Card=cc.Auto_Card
            inner join pr_current pr on sr.current_id=pr.prid and pr.Date_trans<'2013-03-31' and pr.Date_depart>'2013-01-01'
            inner join user_standart_pts pts on pts.id=sr.standart_id
      WHERE
         sr.d_from<'2013-03-31' and sr.d_to>'2013-01-01'
      ) tb
      PIVOT (
         sum(Total) FOR cmonth in ([24157],[24158],[24159])
      ) pv
      order by pv.ssort,pv.nnumber,pv.Full_name;

_________________
return @@tMonth[%m]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Spartak



Зарегистрирован: 18.03.2010
Сообщения: 180

СообщениеДобавлено: Вт Мар 05, 2013 10:17    Заголовок сообщения: Ответить с цитатой

Попробуйте заменить ,[24157],[24158],[24159] на ,"24157","24158","24159" сверху и снизу
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Вт Мар 05, 2013 11:23    Заголовок сообщения: Ответить с цитатой

Spartak, спасибо за наводку, нашел решение!

вверху: ([24157]),([24158]),([24159]) должно быть, а где PIVOT
([245157],[24158],[24159])

Работающий код:

Код:

alias _D_FROM ='2013-01-01';
alias _D_TO ='2013-03-31';

alias abv := 'SELECT
      ROW_NUMBER () over(order by pv.ssort,pv.nnumber,pv.Full_name),pv.Num_tab,pv.Full_Name,pv.Name_Appoint,pv.Struct_Name,([24157]),([24158]),([24159])
      FROM
      (
      SELECT
         pts.pt as Standart_id,
         year(sr.d_from)*12+MONTH(sr.d_from) as cmonth,
         pp.Num_Tab as Num_tab,
         cc.Full_Name as Full_Name,
         (select ap2.Name_appoint
            from Appointments ap2
            where ap2.Code_appoint =
               (select top 1 pr2.Code_Appoint
               from pr_current pr2
               where pr2.pId=sr.people_id and pr2.Date_trans<_D_TO and pr2.Date_depart>_D_FROM and pr2.Date_depart= (
               select max(Date_depart) from pr_current pr3 where pr3.pId=sr.people_id and pr3.Date_trans<_D_TO and pr3.Date_depart>_D_FROM
               ) ) ) as Name_Appoint,   
         (select Struct_name
            from Structs ss2
            where Struct_Code =
               (select top 1 pr2.Code_struct_name
               from pr_current pr2
               where pr2.pId=sr.people_id and pr2.Date_trans<_D_TO and pr2.Date_depart>_D_FROM and pr2.Date_depart= (
               select max(Date_depart) from pr_current pr3 where pr3.pId=sr.people_id and pr3.Date_trans<_D_TO and pr3.Date_depart>_D_FROM
               ) ) ) as Struct_Name,
         (select sort
            from Structs ss2
            where Struct_Code =
               (select top 1 pr2.Code_struct_name
               from pr_current pr2
               where pr2.pId=sr.people_id and pr2.Date_trans<_D_TO and pr2.Date_depart>_D_FROM and pr2.Date_depart= (
               select max(Date_depart) from pr_current pr3 where pr3.pId=sr.people_id and pr3.Date_trans<_D_TO and pr3.Date_depart>_D_FROM
               ) ) ) as ssort,
         (select cl2.number
            from cells cl2
            where cl2.Cell_item =
               (select top 1 pr2.Cell_item
               from pr_current pr2
               where pr2.pId=sr.people_id and pr2.Date_trans<_D_TO and pr2.Date_depart>_D_FROM and pr2.Date_depart= (
               select max(Date_depart) from pr_current pr3 where pr3.pId=sr.people_id and pr3.Date_trans<_D_TO and pr3.Date_depart>_D_FROM
               ) ) ) as nnumber,         
         sr.total as Total
      /*(FROM)*/
      FROM
         user_standart_recipients sr
            inner join people pp on sr.people_id=pp.pid and pp.out_date>_D_FROM and pp.in_date<_D_TO
            inner join card cc on pp.Auto_Card=cc.Auto_Card
            inner join pr_current pr on sr.current_id=pr.prid and pr.Date_trans<_D_TO and pr.Date_depart>_D_FROM
            inner join user_standart_pts pts on pts.id=sr.standart_id
      WHERE
         sr.d_from<_D_TO and sr.d_to>_D_FROM
      ) tb
      PIVOT (
         sum(Total) FOR cmonth in ([24157],[24158],[24159])
      ) pv
      order by pv.ssort,pv.nnumber,pv.Full_name';

--return abv['];



stable @asd abv['];
return @asd:[x];
--browser @asd;


destroy @asd;
free *;

_________________
return @@tMonth[%m]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU