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

Вниз

Коллеги! Как   Найти похожие ветки 

 
BCPP_Builder_Dev ©   (2002-09-18 11:48) [0]

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

Процедура:

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 ...

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

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

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


 
sky3d ©   (2002-09-18 12:14) [1]

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

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

или

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


 
BCPP_Builder_Dev ©   (2002-09-18 12:25) [2]

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

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


 
Delirium ©   (2002-09-18 12:31) [3]

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


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

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 ...


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

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

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


 
3JIA9I CyKA ©   (2002-09-18 13:05) [6]

Ку?

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


 
sky3d ©   (2002-09-18 13:10) [7]

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

2Delirium
Thanx


 
3JIA9I CyKA ©   (2002-09-18 13:18) [8]

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


 
BCPP_Builder_Dev ©   (2002-09-18 13:42) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2002.10.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
14-31994
Wolf226
2002-09-13 16:01
2002.10.10
Существует ли AutoIncrement в Серверных БД?


8-31908
Lynx
2002-06-11 13:11
2002.10.10
Как заставить прогу работать под win2k и winXP


14-31997
Владик_1
2002-09-17 10:12
2002.10.10
Дельфийские игры? В Брянске? Кто оттуда?


3-31661
Юра
2002-09-19 19:34
2002.10.10
Что за ошибка BDE? Too many record lock in table


3-31668
Шурик Ш
2002-09-20 12:34
2002.10.10
Не выходит создание Lookup-поля програмно