سبد خرید 0

وبلاگ

pivot Table در Sql Server قسمت 1

pivot چیست ؟

Pivot table ها در واقع همانند سایر  Table های دیگر می باشند فقط با این تفاوت که در نمایش ردیف و ستون های آنها مقداری تفاوت وجود دارد .

دستور pivot جزو دستوراتی از Sql server می باشد که ممکن است در بیشتر پروژه هایمان برای نمایش گزارشات مختلف   به استفاده از آن نیاز داشته باشیم.

کاربرد دستور pivot تقریبا تبدیل نمایش خروجی یک کوئری از حالت ردیفی به ستونی می باشد . به صورت خیلی خلاصه بخواهیم نحوه کارکرد این دستور را بیان کنیم ، کار آن یک چرخش 90 درجه جداول  می باشد ، یعنی جای ستون و ردیف ها را با هم جابه جا کنیم .

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

ساختار دستور Pivot به صورت زیر می باشد :

بعد از نوشتن Pivot و داخل پرانتز مقابل آن خواهیم داشت :

1- یک aggregation function .

2- نوشتن کلمه کلیدی For و  تعیین نام فیلدی که قصد تبدیل آن به چنید ستون را خواهیم داشت .

همانطور که درsyntax این دستور ملاحضه می کنید ،   دستور pivot حتما باید داری یک aggregation function باشد .

فیلد مقابل کلمه For با توجه به مقادیری که بر میگرداند هر کدام به ستون هایی مجزا تبدیل می شوند . مثلا اگر در مقابل for اسم ستونی را داریم که محتوای آن فیلد دارای سه مقدار A,B,C می باشد ، در نتیجه خروجی دستور شاهد سه ستون با عنوان های A,B,C خواهیم بود.

ساختار دستور آن به صورت خلاصه تر به صورت زیر می باشد :

بررسی یک مثال عملی :

جدولی به اسم Invoice داریم که شامل سه فیلد به عنوان های زیر می باشد :

InvoiceNumber , InvoiceDate , InvoiceAmmount

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

و چندین رکورد را در آن درج میکنیم . قصد داریم میزان فروش محصولات را در هرماه از سال نمایش دهیم . دستور مورد نظر را به صورت زیر می نویسیم :

که خروجی آن به صورت زیر می باشد :

و اما توضیح کدهای بالا :

در داخل دومین دستور Select که به صورت subquery نوشته شده است ، سه فیلد انتخاب کرده ایم که شامل :

 تا اینجا اگر این دستور را اجرا کنیم ، در خروجی شاهد سه ستون سال ، ماه و مقدار خواهیم بود .

فیلد سال که ثابت است و می خواهیم یکی از ستون های جدول باشد ، از Amount در قسمت Aggregate function از آن استفاده می کنیم و از month در قسمت for در دخل دستور pivot استفاده می کنیم .

مقدار ماه که دستور آن را به صورت زیر نوشته ایم :

یکی از مقادیر زیر را بر می گرداند :

  در قسمت For باید ستونی را که می خواهیم مقدار آن را به چندین ستون تقسیم کنیم را می نویسیم ،که در اینجا ماه فیلد ماه را نوشته ایم  و بعد از آن کلمه کلیدی In  را نوشته و داخل پرانتز مقادیری را که ستون مقابل For بر میگرداند را می نویسیم ، که در این مثال ایم 12 ماه میلادی را نوشته ایم چون فیلد month برای هر ردیف یکی از این 12 ماه را بر میگرداند .

اگر در مقابل دستور For و داخل In  اسم هایی را بنویسیم که توسط فیلد مقابل For برگردانده نمی شود ، مقدار NULL را برای آن ستون خواهیم داشت.مثلا فرض کنید در مثال فوق علاوه بر اسم ماه ها ، دو فیلد اضافی دیگر هم با عنوان های esfand,bahman بنویسیم . چون این دو مقدار هیچ وقت از فیلد ماه با استفاده از دستوری که نوشتیم برگردانده نمی شوند ، پس در خروجی برای این دو فیلد شاهد مقدار NULL خواهیم بود .

اشتراک گذاری:

مطالب زیر را حتما مطالعه کنید

دیدگاهتان را بنویسید

keyboard_arrow_up