Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

хранимая процедура   Найти похожие ветки 

 
Андрей К.   (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.047 c
2-1141396320
Vitalik__
2006-03-03 17:32
2006.03.19
Как узнать какое разрешение на экране?


2-1141131505
Yeg
2006-02-28 15:58
2006.03.19
Чтение данных из типизированного файла


15-1140609912
Дмитрий_Б
2006-02-22 15:05
2006.03.19
Неудобство в работе.


1-1139913835
Dima1
2006-02-14 13:43
2006.03.19
Вопрос по ABBYY lingvo


8-1129542247
smollet
2005-10-17 13:44
2006.03.19
Резка изображения