Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Константин
Зарегистрирован: 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] |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|