Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Коллеги! Как


BCPP_Builder_Dev ©   (2002-09-18 11:48:00) 

Собственно имеется процедура вычисляющая сумму в подчиненной таблице. Данная сумма должна фигурировать как вычисляемое поле в запросе к основной таблице. Как сие реализовать грамотно?

Процедура:

CREATE PROCEDURE [dbo].[sp_oplacheno] @BudjetID INT AS
declare @query_text nvarchar(512)
SET @query_text = "SELECT SUM(PaymentSum) AS Oplacheno FROM
Payments WHERE IsIncome = 0 AND BudjetID = "
SET @query_text = @query_text + STR(@BudjetID)
exec sp_executesql @query_text
GO

Причем прицедуре передается первичный ключ (текущая запись) из главной таблицы.

Основной запрос:

SELECT Prixod, ..., Rasxod, Результат_работы_процедуры AS Oplacheno From Budjets WHERE ...

Как вообще правильнее подойти к решению данного вопроса если все вычисления надобно произвести непосредственно на сервере?

Локальные вычисляемы поля не рассматриваются по причине невозможности организации сортировки по ним.

Если у кого есть пример кода для простоты понимания, буду весьма признателен...


BCPP_Builder_Dev   (2002-09-18 13:42:00) [1]

Огромное всем спасибо за помощь!!!


3JIA9I CyKA   (2002-09-18 13:18:00) [2]

2sky3d
Привели бы лучше кусок кода, если уж решили блистать внимательным прочтением вопросов.


sky3d   (2002-09-18 13:10:00) [3]

2Fiend
Для того то их(sp, func), коллега, и делают что не писать такие вот запросы по многу раз и вообще читайте лучшу вопрос, чем блистать знанием sql (без обид pls, не дети)

2Delirium
Thanx


3JIA9I CyKA   (2002-09-18 13:05:00) [4]

Ку?

select
t1.*,
IsNull(t2.sm, 0)
from
(select
t1_id = t.t1_id,
sm = sum(t.some_field)
from table2 t
group by t.t1_id
) t2 right join table1 t1 on t1.t1_id = t2.t1_id


Fiend   (2002-09-18 12:52:00) [5]

Да тут собсно вообще можно обойтись без процедуры или функции.

SELECT Prixod, ..., Rasxod, (SELECT SUM(PaymentSum) AS Oplacheno FROM Payments WHERE IsIncome = 0 AND BudjetID =какоетозначениеилиполе) AS Oplacheno From Budjets WHERE ...


MOA   (2002-09-18 12:51:00) [6]

1. Вариант с процедурами
CREATE PROCEDURE [dbo].[sp_oplacheno] @BudjetID INT
AS
BEGIN
SELECT SUM(PaymentSum) AS Oplacheno FROM
Payments WHERE IsIncome = 0 AND BudjetID = @BudjetID
END
-- executesql не надо

CREATE PROCEDURE [dbo].Zapros @<Ваши параметы>...
AS
SELECT Prixod, ..., Rasxod, Результат_работы_процедуры AS Oplacheno From Budjets WHERE ...

и получите результат процедуры

2. Вариант с функцией
CREATE FUNCTION [dbo].[fn_oplacheno] (@BudjetID INT)
RETURNS Numeric(9,2)
AS
BEGIN
DECLARE @Res Numeric(9,2)
RETURN SELECT @REs = SUM(PaymentSum) AS Oplacheno FROM
Payments WHERE IsIncome = 0 AND BudjetID = @BudjetID
RETURN @Res
END

SELECT Prixod, ...., Rasxod, dbo.fn_oplacheno(BudjetID) AS Oplacheno From Budjets WHERE ...


Delirium   (2002-09-18 12:31:00) [7]

CREATE FUNCTION dbo.fn_oplacheno (@BudjetID INT)
RETURNS int
AS
BEGIN
declare @Result int
SELECT @Result=SUM(PaymentSum) FROM Payments
WHERE (IsIncome=0) AND (BudjetID=@BudjetID)
RETURN(@Result)
END


BCPP_Builder_Dev   (2002-09-18 12:25:00) [8]

Реализовать процедуру в форме функции? простите, а как это сделать?
Не могли бы вы привести в этом случае примерный текст функции реализующей запрос:

CREATE PROCEDURE [dbo].[sp_oplacheno] @BudjetID INT AS
declare @query_text nvarchar(512)
SET @query_text = "SELECT SUM(PaymentSum) AS Oplacheno FROM
Payments WHERE IsIncome = 0 AND BudjetID = "
SET @query_text = @query_text + STR(@BudjetID)
exec sp_executesql @query_text
GO


sky3d   (2002-09-18 12:14:00) [9]

А почему бы не попробовать сделать ф-цию для вычисления суммы и использовать запрос типа

SELECT FIELD1, FIELD2, MYSUM = dbo.func_GetSum(FIELD_KEY)
FROM TABLE1

или

SELECT FIELD1, FIELD2, dbo.func_GetSum(FIELD_KEY) AS MYSUM
FROM TABLE1


Наверх

Титульная страница Поиск, карта сайта Написать письмо