Форум: "Базы";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Внизхранимая процедура Найти похожие ветки
← →
Андрей К. (2006-01-27 08:12) [0]Здравствуйте! Помогите, пожалуйста! Проблема такая: есть хранимая процедура (назавем ее хп). в нее посылаются некие параметры пар1, пар2... в хп написо select...... union select.... union....select. В рез-те вызова хп получается список типа (1 столбец - ФИО, 2-й - рубли:
Иванов 2, Иванов 5, Иванов 8, Петров 3, Петров 6...
как вызвать хп, что бы сгруппировать по "ФИО" и сложить по "рубли"? т.е. должно получиться всего две строки: Иванов 15, Петров 9.
← →
Ega23 © (2006-01-27 08:57) [1]
Select A.*, Cnt=A.Count(...) from
(Select .....
union all
Select .....
union all
Select ..... ) as A
Group By A. ....
Общий ход мысли ясен?
← →
Андрей К. (2006-01-27 09:35) [2]Вот кусок моей хп (в SQL Server 2000):
CREATE PROCEDURE sp_DolgAg_Sokr (@dat1 varchar (10), @dat2 Varchar(10), @ag Varchar(20)) AS
SELECT dbo.Operations.Kod_Agenta, dbo.Agents.Agent + dbo.Agents.AdrAg + dbo.Agents.PrimAg AS Inf_Agenta, dbo.Operations.Otgruzka as SummaDol, dbo.Operations.id_Comand
FROM dbo.AgComand INNER JOIN dbo.Agents ON dbo.AgComand.id_Agenta = dbo.Agents.id_Agenta RIGHT OUTER JOIN dbo.Operations ON dbo.AgComand.Kod_AgCom = dbo.Operations.Kod_Agenta
WHERE (dbo.Operations.Data between CONVERT(DATETIME, @dat1, 104) and CONVERT(DATETIME, @dat2, 104)) AND (dbo.Operations.Kod_Agenta like @ag)
UNION
SELECT dbo.Operations.Kod_Agenta, dbo.Agents.Agent + dbo.Agents.AdrAg + dbo.Agents.PrimAg AS Inf_Agenta, ISNULL(dbo.Operations.Vozvrat, 0), dbo.Operations.id_Comand
FROM dbo.AgComand INNER JOIN dbo.Agents ON dbo.AgComand.id_Agenta = dbo.Agents.id_Agenta RIGHT OUTER JOIN dbo.Operations ON dbo.AgComand.Kod_AgCom = dbo.Operations.Kod_Agenta
WHERE (dbo.Operations.Data between CONVERT(DATETIME, @dat1, 104) and CONVERT(DATETIME, @dat2, 104)) AND (dbo.Operations.Kod_Agenta like @ag)
UNION
SELECT....
Если написать CREATE PROCEDURE sp_DolgAg_Sokr (@dat1 varchar (10), @dat2 Varchar(10), @ag Varchar(20)) AS
SELECT * from (SELECT dbo.Operations.Kod_Agenta....SELECT....) group by SummaDol, тогда выскакивает ошибка "Error 170: Line 134: Incorrect syntax near ")"". Хотя скобка там стоит!
← →
stone © (2006-01-27 09:38) [3]
> Андрей К.
Создай временную таблицу (та что с # начинается)
далее делай так
insert into #table
select ...
insert into #table
select ...
insert into #table
select ...
select ..., sum(...) ну и т.д.
← →
stone © (2006-01-27 09:42) [4]
> ну и т.д.
select ..., sum(...) from #table конечно же
← →
Ega23 © (2006-01-27 09:52) [5]
> SELECT * from (SELECT dbo.Operations.Kod_Agenta....SELECT.
> ...) group by SummaDol
SELECT * from (SELECT dbo.Operations.Kod_Agenta....SELECT ...) as A group by SummaDol
← →
Андрей К. (2006-01-27 10:04) [6]Я думал об этом варианте, но это, мне кажется, будет занимать намного больше ресурсов и долго будет делаться отчет! Или я не прав?
← →
stone © (2006-01-27 10:10) [7]
> Андрей К. (27.01.06 10:04) [6]
А ты попробуй :))
Скорость в первую очередь от правильных индексов зависит, да и дисковая подсистема тоже не оследнюю роль играет. Что касается ресурсов, в обоих вариантах все телодвижения происходят в tempdb. Делай выводы.
← →
Андрей К. (2006-01-27 10:12) [8]Ega23, получилось!!! спасибо большое!!! А что значит as A?
← →
Ega23 © (2006-01-27 10:21) [9]Можешь и as B, а также as C, as TempSelect, as VyborkaKakTablica и т.п.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c