PDA

View Full Version : سوال در مورد ایجاد رکورد نسبت به سال با فیلدی متفاوت



safa55
یک شنبه 26 بهمن 1393, 10:56 صبح
با سلام
دوستان یک مشکلی دارم و نمی دونستم باید در این زمینه چه چیزی را جستجو کنم.
یک جدول دارم که حدودا 400 رکورد دارد که یکی از فیلد هاش مبلغ(متفاوت) را نسبت به سال نشان می دهد. و print ای که گرفته می شود برای هر سال بر اساس این فیلد است . ولی می خوام که با گذشت هر سال این مبلغ (400 رکورد ) 20 درصد نسبت به سال قبل اش افزایش یابد. و در سال جدید با مبلغ جدید محاسبه شود.
برای این کار بهینه ترین روش کدام است؟
روش من این است که برای هر سال جدید رکورد های سال قبل duplicate شود (تکرار) و مبلغ جدید برای رکورد های جدید ثبت شود.
آیا راه بهتری هست. چکار باید کنم. البته مبلغ این 400 رکورد متفاوت از یکدیگر می باشد ولی هر سال قراره 20 درصد اضافه بشود.؟

SabaSabouhi
یک شنبه 26 بهمن 1393, 11:01 صبح
با سلام
دوستان یک مشکلی دارم و نمی دونستم باید در این زمینه چه چیزی را جستجو کنم.
یک جدول دارم که حدودا 400 رکورد دارد که یکی از فیلد هاش مبلغ(متفاوت) را نسبت به سال نشان می دهد. و print ای که گرفته می شود برای هر سال بر اساس این فیلد است . ولی می خوام که با گذشت هر سال این مبلغ (400 رکورد ) 20 درصد نسبت به سال قبل اش افزایش یابد. و در سال جدید با مبلغ جدید محاسبه شود.
برای این کار بهینه ترین روش کدام است؟
روش من این است که برای هر سال جدید رکورد های سال قبل duplicate شود (تکرار) و مبلغ جدید برای رکورد های جدید ثبت شود.
آیا راه بهتری هست. چکار باید کنم. البته مبلغ این 400 رکورد متفاوت از یکدیگر می باشد ولی هر سال قراره 20 درصد اضافه بشود.؟

سلام
بله، به نظر روش درستی میاد. فقط یک ستون هم برای سال باید داشته باشی. اینطوری هم رکوردهای امسال رو داری
و هم سابقه قیمت‌ها رو.

صبا صبوحی

Fotofan
یک شنبه 26 بهمن 1393, 11:02 صبح
سلام دوست عزیز. ببخشید من دقیق متوجه نشدم. این رکورد ها باید تکرار شوند. منظورم اینه که مثلا امسال 400 رکورد هست. سال دیگر وقتی رکورد ها اضافه میشوند: فقط همون 400 رکورد ویرایش بشن. یا از نو 400 رکورد جدید ذخیره بشوند با 20 درصد افزوده بر مبلغ. که برای دوسال میشه 800 تا

safa55
یک شنبه 26 بهمن 1393, 11:10 صبح
سلام دوست عزیز. ببخشید من دقیق متوجه نشدم. این رکورد ها باید تکرار شوند. منظورم اینه که مثلا امسال 400 رکورد هست. سال دیگر وقتی رکورد ها اضافه میشوند: فقط همون 400 رکورد ویرایش بشن. یا از نو 400 رکورد جدید ذخیره بشوند با 20 درصد افزوده بر مبلغ. که برای دوسال میشه 800 تا
ممنون از شما دو عزیز.
برای هر سال فقط 400 رکورد دارم ولی مبلغ هر سال نسبت به قبل باید مثلا 20 درصدی افزوده شود. البته نیاز است که برای سالهای فبل اطلاعات بمونه . فقط خواستم بدونم که ایا راهی هست که من به جای تکرار کردن این 400 رکورد بتونم برای هر سال نسبت به مبلغ اش جواب بگیرم؟

SabaSabouhi
یک شنبه 26 بهمن 1393, 11:13 صبح
ممنون از شما دو عزیز.
برای هر سال فقط 400 رکورد دارم ولی مبلغ هر سال نسبت به قبل باید مثلا 20 درصدی افزوده شود. البته نیاز است که برای سالهای فبل اطلاعات بمونه . فقط خواستم بدونم که ایا راهی هست که من به جای تکرار کردن این 400 رکورد بتونم برای هر سال نسبت به مبلغ اش جواب بگیرم؟

سلام
دوست عزیز، طبیعی هست که این جدول نرمال نیست.
شما نباید قیمت رو تو جدول کالا نگه‌داری کنی.
حتماً برای قیمت یه جدول جداگانه باید بگیری که با کلید به جدول کالا ارتباط داشته باشه.
و تو جدول کلیدها ستون سال و ستون قیمت داشته باشی.

صبا صبوحی

Fotofan
یک شنبه 26 بهمن 1393, 11:25 صبح
بله . البته که وجود داره. سریع ترین راه اینه که وقتی روی هر رکورد کلیک کردی یا مثلا با ID فراخوانی کردی.بیای و از فیلد تاریخ ، تاریخ رو بخونی و مقدار Year رو برگردونی. بعد سال جاری رو از مقدار داخل بانک کم کنی.
مثلا:


سال جاری - سال موجود در فیلد بانک
1393 - 1390= 3


حالا قیمت رو باید به درصد تبدیل کنی. به این صورت 20 درصد رو برکردون:



20*(قیمت اصلی /100)
Ex:
100000/100=1000

1000*20=20000



طبق محاسبه ی بالا برای هر 100000 تمن هرسال 20000تمن باید اضافه بشه. و برای 3 سال هم میشه 60000 تمن.

حالا هربار که هرکدوم از رکورد ها رو فراخوانی کردی بر طبق فیلد تاریخ ثبت و قیمت به این صورت می تونی محاسبه کنی که هرسال به صورت خودکار 20 در صد اضافه می شود.

اگه بازم مشکل داشتید پ.خ کنید

با تشکر

safa55
یک شنبه 26 بهمن 1393, 11:40 صبح
بله . البته که وجود داره. سریع ترین راه اینه که وقتی روی هر رکورد کلیک کردی یا مثلا با ID فراخوانی کردی.بیای و از فیلد تاریخ ، تاریخ رو بخونی و مقدار Year رو برگردونی. بعد سال جاری رو از مقدار داخل بانک کم کنی.
مثلا:


سال جاری - سال موجود در فیلد بانک
1393 - 1390= 3


حالا قیمت رو باید به درصد تبدیل کنی. به این صورت 20 درصد رو برکردون:



20*(قیمت اصلی /100)
Ex:
100000/100=1000

1000*20=20000



طبق محاسبه ی بالا برای هر 100000 تمن هرسال 20000تمن باید اضافه بشه. و برای 3 سال هم میشه 60000 تمن.

حالا هربار که هرکدوم از رکورد ها رو فراخوانی کردی بر طبق فیلد تاریخ ثبت و قیمت به این صورت می تونی محاسبه کنی که هرسال به صورت خودکار 20 در صد اضافه می شود.

اگه بازم مشکل داشتید پ.خ کنید

با تشکر

قیمت و نوع کالا در جداول جداگانه است من فقط مثالی همچین چیزی رو نوشتم که یک جدول دارم (با id کار می کنم).
دوست عزیز حرف شما متین ، ولی این 20 درصد نسبت به سال قبل است نه سال اولیه. اینصوری که نمیشه مثلا گفته شما 60000 تومن. مثلا سال اول 100 تومن بود سال بعد میشه 120 ت و سال بعد 144 ت و.....

Fotofan
یک شنبه 26 بهمن 1393, 14:08 عصر
قیمت و نوع کالا در هر جدولی باشه مهم نیست. حرف شما کاملا درسته من اشتباه متوجه شدم. خب اونجا که سال ها رو از همدیگه منها میکنید. هر عددی بدست آمد می تونید در یک حلقه ی For قرار بدید.

شاید این کد تونست کمکتون کنه

int i= CurrentYear - Year;
Double Ghimat=قیمت اصلی;
Double Darsad= 0;
for(;i==0;i--)
{
Darsad= (price/100) * 20;
price+=Darsad;

}

safa55
یک شنبه 26 بهمن 1393, 15:09 عصر
قیمت و نوع کالا در هر جدولی باشه مهم نیست. حرف شما کاملا درسته من اشتباه متوجه شدم. خب اونجا که سال ها رو از همدیگه منها میکنید. هر عددی بدست آمد می تونید در یک حلقه ی For قرار بدید.

شاید این کد تونست کمکتون کنه

int i= CurrentYear - Year;
Double Ghimat=قیمت اصلی;
Double Darsad= 0;
for(;i==0;i--)
{
Darsad= (price/100) * 20;
price+=Darsad;

}


دوست عزیز مرسی
همچین چیزی قبلا به ذهنم رسیده بود ولی مشکلی که پیش می یاید این است که چون برای سال های قبل مبلغ در بانک ذخیره نشده است و باید محاسبه شود. مشکل در query ای که برای سال جدید باید بگیرم بوجود می اید.


shakhs

Sal

mablag



X

1393

1000



Y

1393

1200



Z

1393

1300







X

1394

1200



Y

1394

1440



Z

1394

1650





در جدول بالا مثلا برای سال 93 اطلاعات در بانک ذخیره شده ولی برای سال بعد اطلاعات (مبلغ) باید محاسبه شود و چون محاسبه می شود برای مثال برای یک نفر مشکلی نیست ولی وقتی قرار است یکباره برای 500 نفر محاسبه شود مشکل بوجود می آید در کل من می خواهم با یک query که از بانک میگیرم بتونم برای هر سال به ازای هر نفر مبلغ را داشته باشم.
نمی دونم چکاری بهتر است؟ اگر روشی باشه که رکورد ها رو تکرار نکنم بهتر است ولی این روش هم تقریبا نشدنی است.

safa55
دوشنبه 27 بهمن 1393, 08:58 صبح
دوستان کسی نیست به این سوال جواب بده؟؟ به ظاهر که ساده است ولی نمی دونم چرا نمی تونم جوابی براش پیدا کنم.
لطفا کمک کنید.

golbafan
دوشنبه 27 بهمن 1393, 13:19 عصر
همونطور که خانم صبوحی گفتن جدول شما مشکل طراحی داره

با اینحال بصورت زیر عمل کنید:
فرض کنید s1 اولین سال و m1 اولین مبلغ مربوط به سال s1 باشه. حالا اگر s2 سال دیگری باشه و d هم درصد باشه، مبلغ m2 بصورت زیر محاسبه میشه:


m2=m1*(1+d/100)^(s2-s1)



برای مثال سال 1390 ما 1000 تومان میدیم سال 1394 چقدر میدیم با نرم 20 درصد؟

x=1000*1.2^4
x=2074

safa55
دوشنبه 27 بهمن 1393, 14:24 عصر
همونطور که خانم صبوحی گفتن جدول شما مشکل طراحی داره

با اینحال بصورت زیر عمل کنید:
فرض کنید s1 اولین سال و m1 اولین مبلغ مربوط به سال s1 باشه. حالا اگر s2 سال دیگری باشه و d هم درصد باشه، مبلغ m2 بصورت زیر محاسبه میشه:


m2=m1*(1+d/100)^(s2-s1)



برای مثال سال 1390 ما 1000 تومان میدیم سال 1394 چقدر میدیم با نرم 20 درصد؟

x=1000*1.2^4
x=2074

دوست عزیز ممنون بابت جوابتون.
من در چند کامنت قبل توضیح دادم که مثالی اینطوری گفتم که یک جدول دارم. من چند جدول دارم که از طریق کلید (id) و... کالا رو به قیمت متصل می کنه. از این بابت مشکلی نیست.
من برای سال اول که برای هر شخص یک فاکتور می گیرم مشکلی ندارد چون قیمت همان سال در بانک ذخیره شده است. ولی برای سالهای بعد نیاز است که برای هر سال قیمت برابر با قیمت سال قبل + 20% آن باشد.
اگر بخواهم رکورد ها را duplicate کنم اطلاعات زیاد می شوند. اگر از روشهای بالا استفاده کنم چون می خواهم مثلا برای 500 نفر یکباره فاکتور بدم. نمی شود که با query گرفتن از بانک محاسباتی همچون for (یکی از دوستان در چند پست قبل توضیح دادند) استفاده کنم.

برای مثال همان فیش های برق ،تلفن و... چطوری حساب می شود؟ چیزی شبیه به این است ولی مشتری های این پروژه price های متفاوتی دارند . مثلا نرخ برای هر کس با دیگری فرق دارد. بعد از اینکه این مبلغ را بدست اوردم نیاز است با تعداد دیگری از فیلدهای دیگر جمع و تفریق شود بعد مبلغ (قیمت) کلی بدست بیاید.

محمد آشتیانی
دوشنبه 27 بهمن 1393, 14:52 عصر
سلام
دوست عزیز جدا از اینکه طراحی دیتابیس شما درست هست یا خیر ، خیلی نگران بالا رفتن حجم دیتابیس و تعداد رکوردها نباشید ، 400 رکورد در سال برای SqlServer اصلا به حساب نمیاد.



موفق باشید.

golbafan
دوشنبه 27 بهمن 1393, 18:33 عصر
دوست عزیز ممنون بابت جوابتون.
من در چند کامنت قبل توضیح دادم که مثالی اینطوری گفتم که یک جدول دارم. من چند جدول دارم که از طریق کلید (id) و... کالا رو به قیمت متصل می کنه. از این بابت مشکلی نیست.
من برای سال اول که برای هر شخص یک فاکتور می گیرم مشکلی ندارد چون قیمت همان سال در بانک ذخیره شده است. ولی برای سالهای بعد نیاز است که برای هر سال قیمت برابر با قیمت سال قبل + 20% آن باشد.
اگر بخواهم رکورد ها را duplicate کنم اطلاعات زیاد می شوند. اگر از روشهای بالا استفاده کنم چون می خواهم مثلا برای 500 نفر یکباره فاکتور بدم. نمی شود که با query گرفتن از بانک محاسباتی همچون for (یکی از دوستان در چند پست قبل توضیح دادند) استفاده کنم.

برای مثال همان فیش های برق ،تلفن و... چطوری حساب می شود؟ چیزی شبیه به این است ولی مشتری های این پروژه price های متفاوتی دارند . مثلا نرخ برای هر کس با دیگری فرق دارد. بعد از اینکه این مبلغ را بدست اوردم نیاز است با تعداد دیگری از فیلدهای دیگر جمع و تفریق شود بعد مبلغ (قیمت) کلی بدست بیاید.

سلام
فرمولی که بهتون دادم دقیقا برای همین نیاز شما بود
چون روی هر رکورد میتونه که مجزا محاسبه شه

شما اگر از view استفاده کنید میتونید فیلد جدیدی مثل m2 داشته باشید که بر اساس سال اتوماتیک مبلغ بگیره


SELECT
dbo.t1.id,
dbo.t1.s1,
dbo.t1.m1,
dbo.t1.s2,
m1*POWER(1.2,(s2-s1)) as m2
FROM
dbo.t1

golbafan
دوشنبه 27 بهمن 1393, 18:46 عصر
حالا اگر جدول من این باشه:
128548
در ویو داریم:
128549

safa55
دوشنبه 27 بهمن 1393, 20:04 عصر
حالا اگر جدول من این باشه:
128539

در ویو داریم:
128540

مرسی دوست عزیز.
جواب شما درست است .