Главная страница
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.028 c
6-1133621345
Владимир
2005-12-03 17:49
2006.03.19
Как отловить все ответы сервера?


8-1129426196
Allocator
2005-10-16 05:29
2006.03.19
SampleGraber 2 AVI - DSPack


15-1140950848
A4
2006-02-26 13:47
2006.03.19
PixelsPerInch


3-1138093925
BAX
2006-01-24 12:12
2006.03.19
Коннект к базе?


15-1140613855
Compton's G
2006-02-22 16:10
2006.03.19
98 понимает NFTS или нет?