PDA

View Full Version : استفاده از Sum () Over ... به جای Group By



saeed zarei
یک شنبه 22 اردیبهشت 1392, 07:55 صبح
سلام
من از کوئری زیر برای بدست آوردن مجموع مبلغ بدهکار و بستانکار استفاده کرده ام ولی مشکل من اینجاست که میخواهم مثل دستور Group By فقط یک رکورد به من به ازای هر گروه نمایش دهد

SELECT r.[Counter], d.[Year] ,d.Number_Temp , d.number_fix, r.id_Total ,SUM( r.Mablagh_bed) OVER(PARTITION BY d.[Year] ,r.id_Total , d.Number_Temp ORDER BY d.Number_Temp)AS sumbed , SUM( r.Mablagh_bes ) OVER(PARTITION BY d.[Year] ,r.id_Total , d.Number_Temp ORDER BY d.Number_Temp) AS sumbes , d.date_duc,

ROW_NUMBER() OVER ( ORDER BY d.date_duc )AS row_no

FROM tbl_Records r JOIN tbl_Documents d ON d.id_doc = r.id_doc
و اگر از Group By استفاده کنم دیگه نمیتونم شماره رکوردهام و بعضی از ستون های دیگه که لازمشون دارم رو بیرون بکشم ، چون مجبورم نام ستون های جلوی Select رو برای Group By هم بنویسم
لطفا راهنمایی کنید

محمد سلیم آبادی
یک شنبه 22 اردیبهشت 1392, 09:29 صبح
سلام
میشه نتیجه این کوئری رو بیارین و سطرهای انتخابی به عنوان نتیجه هم مشخص کنید تا بشه دستورش رو نوشت.
به گمانم بشه با تابع ROW_NUMBER این فیلتر را انجام داد.
مثلا به این شکل:
SELECT .... FROM (SELECT ROW_NUMBER() OVER(...) AS rnk FROM ... ) D
WHERE rnk = 1