SQL SERVER 2008

تجارب من در رابطه با SQL SERVER

تابع GROUPING_ID
ساعت ۱٠:٢٤ ‎ق.ظ روز ۱۳۸٧/٩/۱۸  کلمات کلیدی: تابع grouping id ، cluster ، sql server 2008 ، t-sql

این تابع به شما اجازه میدهد که مجموعه هایی را مشخص کنید که هر کدام از سطور نتایج متعلق به آنهاست. به عنوان ورودی شما تمام مشخصه هایی را که در هر مجموعه دسته بندی شرکت دارند مهیا میکند. تابع یک نتیجه integer که یک bitmap (نقشه بیتی) است را تولید میکند، که در آن هر بیت جایگزین یک مشخصه متفاوت میشود. در این راه تابع یک عدد صحیح یکه برای هر مجموعه دسته بندی تولید میکند.

Query زیر یک مثال از استفاده این تابع را نمایش میدهد:

 

SELECT 

  GROUPING_ID(

    custid, empid,

    YEAR(orderdate), MONTH(orderdate), DAY(orderdate) ) AS grp_id,

  custid, empid,

  YEAR(orderdate) AS orderyear,

  MONTH(orderdate) AS ordermonth,

  DAY(orderdate) AS orderday,

  SUM(qty) AS qty

FROM dbo.Orders

GROUP BY

  CUBE(custid, empid),

  ROLLUP(YEAR(orderdate), MONTH(orderdate), DAY(orderdate));

 

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

 

grp_id  custid empid       orderyear   ordermonth  orderday    qty

------- ------ ----------- ----------- ----------- ----------- -----------

0       C      3           2006        4           18          22

16      NULL   3           2006        4           18          22

24      NULL   NULL        2006        4           18          22

25      NULL   NULL        2006        4           NULL        22

0       A      3           2006        8           2           10

16      NULL   3           2006        8           2           10

24      NULL   NULL        2006        8           2           10

25      NULL   NULL        2006        8           NULL        10

0       D      3           2006        9           7           30

16      NULL   3           2006        9           7           30

...

به عنوان مثال، عدد 25 جایگزین مجموعه دسته بندی (orderyear, ordermonth) شده است. بیتهای جایگزین عناصری که قسمتی از مجموعه گروه بندی در آن غیر فعال است (ordermonth – 2 و orderyear – 4)، و بیتهایی جایگزین عناصری که قسمتی از مجموعه دسته بندی که فعال هستند، نیستند (orderday – 1, empid – 8, custid – 16) میشوند. عدد 25 از جمع مقادیر جایگزین بیتهایی که فعال هستند به دست می آید یعنی 1+8+16 = 25. این ویژگی مخصوصا وقتی مفید است که شما نیاز دارید که به aggregate ها صورت خارجی بخشید و سپس فقط روی مجموعه های خاص query بزنید. شما میتوانید جدول را با مشخصه grp_id دسته بندی (cluster) کنید که این به SQL Server این امکان را میدهد که به صورت موثر و مفید یک درخواست برای یک مجموعه دسته بندی ویژه را انجام دهد.