Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-31698
123000
2002-09-30 16:28
2002.10.10
Как определить в и-нете ли пользователь?


3-31602
BD
2002-09-18 20:10
2002.10.10
Как создать новую базу данных на Access e через ADO.


1-31677
Anar
2002-09-30 14:36
2002.10.10
Чтение из текстового файла


1-31895
Manulo
2002-09-29 19:58
2002.10.10
Поиск...


1-31848
MC TOL
2002-09-27 16:33
2002.10.10
Direct Oracle Access for Delphi 7?!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский