Главная страница
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.017 c
7-32051
Akim2
2002-07-30 18:49
2002.10.10
Mouse вышла из зоны


7-32031
laza admin
2002-08-02 00:55
2002.10.10
Поможите склепать ауторан! надо чтобы по нажатию на батон открыва


14-31967
IG
2002-09-10 22:47
2002.10.10
Можно ли смотреть DVD на CD-Driv е при помощи како1-нибудь


8-31913
TOR
2002-06-01 14:41
2002.10.10
Идет ли звук через SB ?


1-31882
Newguy
2002-09-30 03:44
2002.10.10
Richedit