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

نام تاپیک: میانگین یک فیلد به ازای تمام مقادیر ارسال شده به یک پارامتر

  1. #1

    میانگین یک فیلد به ازای تمام مقادیر ارسال شده به یک پارامتر

    سلام
    من می خوام یک گزارش بگیرم به این صورت که هم برای یک محصول و هم برای تمام محصولات خروجی به صورت :

    کمپانی ، میانگین کل

    داشته باشه، یک پارامتر ProductId@ برای ارسال آیدی محصول مورد نطر تعریف کردم و کوئری به ازای یک محصول کار می کنه .
    حالا مشکلم اینه که برای محاسبه تمام محصولات فرمولش اینه که برای هر محصول مجزا میانگین کل را حساب کنم و نتایجی که به دست میاد رو با هم جمع کنم و تقسیم بر تعداد محصولات کنم.
    میشه لطفا راهنمایی کنید که چیکار کنم؟

  2. #2

    نقل قول: میانگین یک فیلد به ازای تمام مقادیر ارسال شده به یک پارامتر

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

    select avg(average_per_group) as average
    from
    (
    select grp, avg(value)
    from TableName
    group by grp
    ) D (grp, average_per_group);
    وبلاگ من (Advanced SQL Querying)

  3. #3

    نقل قول: میانگین یک فیلد به ازای تمام مقادیر ارسال شده به یک پارامتر

    مرسی که جواب دادید ولی فکر می کنم نتونستم منظورمو درست برسونم.

    ALTERProcedure [dbo].[po_SalesActual_Report]
    @Year INT,
    @Month VARCHAR(50),
    @ProductID INT

    AS
    Begin
    SELECT
    (V.A-V.B)/V.C AS average,
    V.CompanyID,
    V.AvgFalle,
    V.AvgKise25k,
    V.AvgKise50k,
    V.AvgJambo
    from
    (
    کوئری که بر اساس @productId کار می کند
    )
    AS v
    END



    این برای یک @productId هست حالا اگر بخوام برای تمام productId که در جدول product هستند average رو حساب کنم باید به ازای هر productId میانگین رو حساب کنم بعد از کلش میانگین بگیرم. مشکل من دقیقا اینه میشه لطفا راهنمایی کنید؟
    آخرین ویرایش به وسیله حمیدرضاصادقیان : شنبه 03 اردیبهشت 1390 در 12:14 عصر دلیل: لطفا کدهای خود را در تگ SQL قرار دهید.

  4. #4

    نقل قول: میانگین یک فیلد به ازای تمام مقادیر ارسال شده به یک پارامتر

    سلام.
    شما باید مقداری دستورتون رو Dynamic بنویسید. بهتره اول کنترل کنید مثلا اگر Productid برابر صفر بود در کوئری دوم دیگه پارامترProductId رو پاس ندید و در غیر اینصورت بهش مقدار بدید.
    مثال :



    ALTERProcedure [dbo].[po_SalesActual_Report]

    @Year INT,

    @Month VARCHAR(50),

    @ProductID INT



    AS

    Begin
    Declare @Str Varchar(1000)

    Set @Str=' SELECT (V.A-V.B)/V.C AS average,V.CompanyID,V.AvgFalle,V.AvgKise25k,V.AvgK ise50k,

    V.AvgJambo

    from '
    If @ProductId=0
    Set @Str=@Str+'
    (
    Query Without @ProductId
    )AS v'
    Else
    Set @Str=@Str+' (

    Query with @ProductID value
    )AS v'
    exec(@Str)
    END

  5. #5

    نقل قول: میانگین یک فیلد به ازای تمام مقادیر ارسال شده به یک پارامتر

    >>
    این برای یک @productId هست حالا اگر بخوام برای تمام productId که در جدول product هستند average رو حساب کنم باید به ازای هر productId میانگین رو حساب کنم بعد از کلش میانگین بگیرم. مشکل من دقیقا اینه میشه لطفا راهنمایی کنید؟
    <<

    با این فرض که موقع میانگین گیری کلی مقدار پارامتر productid@ رو Null در نظر می گیرد می تونید این کار رو انجام بدین:

    Select total_averge
    From (select average_per_group
    From t
    Where product_id = @product_id
    Or @product_id is null
    Group by product_id
    )d


    این کوئری در صورتی که متغیر مقداری غیر از null داشته باشد product_id ها رو فیلتر میکنه و در نهایت میانگین محصول مورد نظر رو بدست میاره. و اگر هم Null باشه ابتدا میانگین به ازای هر محصول را جداگانه محاسبه و در آخر نیز میانگین کلی را بدست میاره.
    از اونجایی که کوئری کامل رو ارسال نکردین من مجبور شدم یک کوئری نمونه ارسال کنم.
    وبلاگ من (Advanced SQL Querying)

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

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