Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1140616241
batalov
2006-02-22 16:50
2006.03.19
Windows CE


1-1139781777
FBuilder
2006-02-13 01:02
2006.03.19
Посылка строк


2-1141105672
nap<>
2006-02-28 08:47
2006.03.19
Про GradientFill


15-1140873168
SergP.
2006-02-25 16:12
2006.03.19
PHP.сообщ. при отсутствии данных для $HTTP_POST_VARS. Как убрать?


2-1141133508
zx_
2006-02-28 16:31
2006.03.19
рекурсия





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский