PDA

View Full Version : سوال: Formul



spanishtrain
شنبه 19 مرداد 1387, 23:30 عصر
نوشته شده توسط spanishtrain
با سلام
جناب ثابتی من در گیر یه پروزه آماری سنگینم که می خوام در اون از فرمول متغییری که توسط کاربر وارد می شود برای ایجاد یک سری آمار متفاوت که هر کدام از یک سری داده خام که همه در یک جدول ریخته شدند، استفاده شود به طور مثال جدول داده های اولیه به شکل زیر
کدداده خام ------سال --------مقدار
10 ---------------1375--------- 100
10--------------- 1376--------- 200
20--------------- 1375--------- 1000
20 ---------------1376 ---------2000
30 ---------------1375---------- 10
30 ---------------1376 ----------20
البته هر داده خام یک نام ومشخصات دیگری دارد که در جدول دیگری ذخیره می شود
من می خوام آماری از جدول بالا بسازم که فرمول (کد10+کد20/کد30)را از کاربر دریافت کند و مقدار هر سال را نظیر به نظیر طبق فرمول کاربر محاسبه کند ودر یک جدول ذخیره کند

البته من خودم از این روش استفاده کردم که با دستور select into مقادیر هر داده خام را در یک جدول موقت جدید ذخیره کردم بعد با استفاده ازفرمول برای ستونهای جداول select جدید زدم ولی این راه قابل پارامتریک شدن برای کاربر نبود از توابع جمعی که برای رکوردهای یک ستون هم با group by استفاده میشه، نمیشه استفاده کرد البته این پروژه قبلا به صورت صفحه گسترده مثل Excel یا spss بوده
توجه داشته باشید که در فرمول فوق هم تعداد عملوندها (مثلاکد10) نامعلومه هم جای عملگرها(+*-/) فقط به چهار عمل اصلی نیازدارم
البته من sp زیرو نوشتم که فقط دوتا از دادههای خام بهش میدم و علامت + در اون ثابت چگون کاری کنم که تعداد پارامترها و علامت بین آنها مثل (+)توسط کاربر معلوم شود



SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[SP1]
-- Add the parameters for the stored procedure here
@FI real,
@FJ real
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SETNOCOUNTON;
-- Insert statements for procedure here
SELECT Function1_1.[Year], Function1_1.StatisticsData + Function1_2.StatisticsData AS Expr1, Function1_2.[Year]AS Expr2
FROM dbo.Function1(@FI)AS Function1_1 FULL OUTERJOIN
dbo.Function1(@FJ)AS Function1_2 ON Function1_1.[Year] = Function1_2.[Year]
END


البته Fuction1به صورت زیر که در واقع یک View پارامتریک

SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTERFUNCTION [dbo].[Function1]
(
-- Add the parameters for the function here
@SI real
)
RETURNSTABLE
AS
RETURN
(
-- Add the SELECT statement with parameter references here
SELECTTOP(100)PERCENT [Year], StatisticsData
FROM dbo.TblDATA
WHERE(StatisticsId = @SI)
ORDERBY [Year]
)

ممنون از فروم خوبتون

AminSobati
یک شنبه 20 مرداد 1387, 12:10 عصر
دوست عزیزم،
این کار ساده نیست ولی اولیه ترین راهی که به ذهنم رسید این بود که هر رکورد شما دارای یک ID یونیک باشه و دسترسی به هر Cell از این صفحه گسترده رو به کمک Query فراهم کنید. Query نهایی شما متشکل از فرمولی میشه که توسط چنید Subqeury فراهم شده. کاربر با انتخاب هر Cell بصورت داینامیک یک Subquery ایجاد میکنه. این Subqueryها بینشون عملگرها قرار میگیرند.

spanishtrain
یک شنبه 20 مرداد 1387, 18:20 عصر
من میخوام subquery ها که هرکدام مربوط به یک کد یونیک است را به صورت یک colum در یک جدول در بیاورم یعنی رکودهای یه جدولو به ستونهای جدول دیگه تبدیل کنم تا بشه عملگرها را بین ستونهای جدول جدید قرار داد البته الانم این کارو کردم ولی چون ساب کوری ها بصورت یک functionذخیره شده حتما باید تو کوئری که میخواد محاسباتو انجام بده باید از INNERJOIN استفاده کنم همینطور که در کد بالا میبینید من میخوام ساب کوئری ها تو یک جدول باشه که JOIN نخواد چون هر جونم با توجه به نیاز کاربر باید به صورت پویا ایجاد شود