Форум: "Базы";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];
ВнизКоллеги! Как Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c