تولید سرجمع در SQL

برای تولید سرجمع در پرسش های SQL که توسط دستور Group by بدست آمده از روش ریز استفاده می‌کنیم:

SELECT Country, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY CUBE (Country); 

OR

SELECT Country, SUM(Sales) AS TotalSales 
FROM Sales 
GROUP BY ROLLUP (Country);

که قسمت خط آخر هر فرمان را در نسخه های قدیمی به صورت group by colname with Cube  هم می‌نویسند.

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

  خروجی دستور Rollup در جالت چند ستونی بدین صورت است که علاوه بر تولید سرجمع کلی، بر اساس ستون اول روی ستون دوم سرجمع تولید میکند:

SELECT Country, Region, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY ROLLUP (Country, Region);


CountryRegionTotalSales
CanadaAlberta100
CanadaBritish Columbia500
CanadaNULL600
United StatesMontana100
United StatesNULL100
NULLNULL700

خروجی دستور Cube در جالت چند ستونی بدین صورت است که علاوه بر تولید سرجمع کلی، بر اساس تمام ستون ها سرجمع تولید میکند:

SELECT Country, Region, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY CUBE (Country, Region);


خروجی مثال مایکروسافت:

CountryRegionTotalSales
CanadaAlberta100
NULLAlberta100
CanadaBritish Columbia500
NULLBritish Columbia500
United StatesMontana100
NULLMontana100
NULLNULL700
CanadaNULL600
United StatesNULL100


همانطور که متوجه شدید مقدار سطری که حاوی سرجمع است NULL است، برای استفاده عملیاتی میشه با تابع IsNull مقدار گذاریش کرد:

SELECT  ISNULL(Country, 'Total Sum' ),  SUM(Sales) AS TotalSales
FROM Sales

GROUP BY ROLLUP (Country);


منبع:

https://docs.microsoft.com/en-us/sql/t-sql/queries/select-group-by-transact-sql?view=sqlallproducts-allversions

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد