نمایش نتایج 1 تا 6 از 6

نام تاپیک: جمع یک فیلد با شرایط خاص در فیلد دیگر

  1. #1

    جمع یک فیلد با شرایط خاص در فیلد دیگر

    با سلام
    من یه جدول تو sql دارم که از سه فیلد به نام نام کالا و تاریخ فروش و مبلغ فروش تشکیل شده - من 31 روز که بشود یک ماه کالاهایی را فروخته ام و این نکته هم بگم که در هر روز فقط 3 کالا فروخته ام نه کمتر و نه بیشتر- حالا مشکل من این است که میخوام یه فیلد دیگه اضافه کنم که جمع مبلغ هر روز در اخرین رکورد ان روز قرار بده مثلا 8 رکورد دارم که در روز یکم کالا فروخته شده - حالا میخوام جمع فروش 8 کالایی که در یکم فروخته شده در فیلد جمع مبالغ روزانه دررکورد اخر همان روز قرار بگیره و برای روز دوم و الی الاخر
    ممنون میشم راهنمایی کنید
    مثال
    نام کالا ---------------تاریخ فروش------------------- مبلغ فروش--------------------- جمع کل فروش روزانه
    کتاب 1 --------------- 1/1/90 ------------------------- 250
    کتاب 2 --------------- 1/1/90 ------------------------- 150
    کتاب 3 --------------- 1/1/90 ------------------------- 100 ----------------------------500
    کتاب 4 --------------- 2/1/90 ------------------------- 300
    کتاب 5 --------------- 2/1/90 ------------------------- 250
    کتاب 6 --------------- 2/1/90 ------------------------- 150 -------------------------700

  2. #2
    کاربر دائمی آواتار morteza271
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    مشهد
    پست
    1,723

    نقل قول: جمع یک فیلد با شرایط خاص در فیلد دیگر

    برای این کار به نظر من بهتره که این کار رو بکنید :
    هر بار که یه سطر جدید Insert می کنید چک کنید اگه اولین فروش امروز هست که مبلغ فروش رو در ستون جمع کل فروش روزانه هم ذخیره کنید ولی اگه اولی نیست مقدار فروش رو با مقدار جمع کل فروش روزانه سطر قبلی(فروش قبلی) جمع کنید و در ستون جمع کل فروش روزانه ذخیره کنید.

    البته کلا به نظرمن این کار رو نکنید بهتره یعنی به نظر من این ستون رو نذارین بهتره و به جای اینکه این ستون رو قرار بدین این کار رو بکنید :
    در هر جایی که میخواهین جمع کل فروش روزانه رو نمایش بدین یه کوئری بزنید که ستون مبلغ فروش تمام سطرهای تاریخ مورد نظر رو باهم جمع کنه.

    این کاری که میخواهین شما بکنین اصلا منطقی نیست و احتمال بوجود اومدن خطا رو افزایش میده!

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

  3. #3

    نقل قول: جمع یک فیلد با شرایط خاص در فیلد دیگر

    با تشکر از شما
    ولی من میدونم که بهترین روش کوئری هست که با group by بنویسیم ولی بعد چطوری میتونم نتایج این کوئری را در جدول ذخیره کنم اخه بعد دوباره این اعداد مورد نیازم هست در جایی دیگه

  4. #4
    کاربر دائمی آواتار morteza271
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    مشهد
    پست
    1,723

    نقل قول: جمع یک فیلد با شرایط خاص در فیلد دیگر

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

    به نظر من که استفاده از کوئری(مساحبه جمع قیمت ها در زمان نیاز) بهترین راهه البته اگه بقیه دوستان هم نظری دارن استقبال میکنم.

  5. #5

    نقل قول: جمع یک فیلد با شرایط خاص در فیلد دیگر

    به جای اینکه یک فیلد جدید درست کنید و جمع فروش رو توی اون نگه دارید یک View درست کنید که نتیجه مورد نظرتون رو تولید کنه بعد هر جایی که نیاز به این مقدار داشتید از این View بخونید. البته بستگی به میزان نیاز شما به این مقدارها داره ، اگر نیاز شما به این مقدارها خیلی زیاد (مثلا به ازا هر کاربر روزانه بیش از 100 بار) و یا تعداد رکوردهای این جدول خیلی زیاد (بازهم برای مثال بیش از 1000000 رکورد) وهمچنین سرعت محاسبه هم برای شما بسیار مهم است اضافه کردن یک فیلد ممکنه به صرفه تر باشه.
    برای درست کردن View میتونید از دستور زیر کمک بگیرید.
    چند داده نمونه و دستور :
    With tbl as(
    Select ID = 1, BookName = 'Book 1', SellDate = '1390/06/24', Price = 200
    UNION ALL
    Select ID = 2, BookName = 'Book 2', SellDate = '1390/06/24', Price = 150
    UNION ALL
    Select ID = 3, BookName = 'Book 3', SellDate = '1390/06/24', Price = 100
    UNION ALL
    Select ID = 4, BookName = 'Book 4', SellDate = '1390/06/25', Price = 50
    UNION ALL
    Select ID = 5, BookName = 'Book 5', SellDate = '1390/06/25', Price = 350
    UNION ALL
    Select ID = 6, BookName = 'Book 6', SellDate = '1390/06/25', Price = 425
    UNION ALL
    Select ID = 7, BookName = 'Book 7', SellDate = '1390/06/26', Price = 120
    UNION ALL
    Select ID = 8, BookName = 'Book 8', SellDate = '1390/06/26', Price = 200
    UNION ALL
    Select ID = 9, BookName = 'Book 9', SellDate = '1390/06/26', Price = 200
    )
    Select
    T1.ID,
    T1.BookName,
    T1.SellDate,
    T1.Price,
    T2.TotalSellPrice
    From
    tbl T1 Left Outer JOIN (Select
    MAX(ID) AS ID,
    SUM(Price) AS TotalSellPrice
    From
    tbl
    Group By
    SellDate) T2
    ON
    T1.ID = T2.ID

  6. #6
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    کاشان
    پست
    580

    نقل قول: جمع یک فیلد با شرایط خاص در فیلد دیگر

    یک روش رو که استاد عزیز گفتن VIEW هست و بسیار روش خوبیه . اما اگه واقعا می خواهید مقدار رو نگه دارید و مجاب به انجام این کار هستید ، یک جدول دیگه باید ایجاد کنید که دارای دو ستون هست . یکی تاریخ و دیگری جمع کل اون تاریخ .
    حالا در ادامه می تونید از یک Trigger هم استفاده کنید تا اگر احتمالا تغییری در جدول پایه ایجاد شد ، به طور خودکار این جدول هم به روز بشه . به نظر من این روش هم روش بسیار خوب و منطقی هست .
    موفق باشید

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •