خانه > Persian Contents, SQL Server, T-SQL > استفاده از عملگر PIVOT برای تبدیل مقادیر تک ستونی به چند ستونی با کمک توابع تجمع

استفاده از عملگر PIVOT برای تبدیل مقادیر تک ستونی به چند ستونی با کمک توابع تجمع

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

 

FROM table_source 

جدول یا کوئری منبع

PIVOT (

aggregate_function ( value_column ) 

تابع تجمعی مورد نظر به همراه ستون مورد نظر

FOR pivot_column 

ستونی که برای ساختن نام ستونها استفاده میشود

IN ( <column_list>) 

مقادیری که از ستون بالا برای عملیات انتخاب میشود

) table_alias

  نام مستعار جدول خروجی


حال این مثال را پیاده‌سازی می‌کنیم، لطفا به کوئری اولیه توجه بفرمایید :

 

SELECT s.Name ShiftName,

h.BusinessEntityID,

d.Name DepartmentName

FROM HumanResources.EmployeeDepartmentHistory h

INNER JOIN HumanResources.Department d ON

h.DepartmentID = d.DepartmentID

INNER JOIN HumanResources.Shift s ON

h.ShiftID = s.ShiftID

WHERE EndDate IS NULL AND

d.Name IN (‹Production›, ‹Engineering›, ‹Marketing›)

ORDER BY ShiftName

 

 

خروجی این جدول لیستی از نام شیفت، شناسه کارمندان و نام قسمت مربوط می‌باشد. به خروجی آن توجه کنید:

 

ShiftName   BusinessEntityID   DepartmentName
Day              3                            Engineering
Day              9                            Engineering

Day              2                            Marketing
Day              6                            Marketing

Evening        25                          Production
Evening        18                          Production
Night            14                          Production
Night            27                          Production

Night            252                        Production
(194 row(s) affected)

 

حال برای تغییر دادن این کوئری به خروجی گزارش مورد نظر آن را به صورت زیر تغییر دهید:

 

SELECT ShiftName,

Production,

Engineering,

Marketing

FROM

(SELECT s.Name ShiftName,

h.BusinessEntityID,

d.Name DepartmentName

FROM HumanResources.EmployeeDepartmentHistory h

INNER JOIN HumanResources.Department d ON

h.DepartmentID = d.DepartmentID

INNER JOIN HumanResources.Shift s ON

h.ShiftID = s.ShiftID

WHERE EndDate IS NULL AND

d.Name IN (‹Production›, ‹Engineering›, ‹Marketing›)) AS a

PIVOT

(

COUNT(BusinessEntityID)

FOR DepartmentName IN ([Production], [Engineering], [Marketing])

) AS b

ORDER BY ShiftName

 

 

خروجی این کوئری به صورت زیر خواهد بود :

 

ShiftName   Production   Engineering   Marketing
Day              79                 6                    9
Evening        54                 0                    0
Night           46                  0                    0

(3 row(s) affected)

دسته‌ها:Persian Contents, SQL Server, T-SQL
  1. مدیر مجله کامژیوتر
    مارس 25, 2010 در 2:52 ق.ظ.

    سلام وبسايت بسيار خوب و پر محتوايي داريد . لطفا با وبسايت p30mag.com نيز که جديدا راه اندازي شده است نيز همکاري فرمائيد تا اين وبسايت نيز بتواند خدمات لازم را در راستاي پيشرفت کشور عزيزمان موثر باشد .پيشاپيش از عضويت شما در اين سايت متشکرم .www.p30magazine.comwww.p30mag.com.

  2. بهنام
    مارس 26, 2010 در 2:10 ب.ظ.

    سلاموبسايت بسيار خوب و پر محتوايي داريد . لطفا با وبسايت cdlocation.com نيز که جديدا راه اندازي شده است نيز همکاري فرمائيد تا اين وبسايت نيز بتواند خدمات لازم را در راستاي پيشرفت کشور عزيزمان موثر باشد .پيشاپيش از عضويت شما در اين سايت متشکرم .www.cdlocation.com

  3. رضایی
    آوریل 22, 2010 در 12:17 ق.ظ.

    با سلامسوال من این است که من یک اسکیوال 2005 با کلی دیتابیس و تنظیمات دارم.می خام یه ویندوز جدید با اسکیوال 2008 نصب کنم . حالا چطوری اونهمه دیتابیس رو بیارم تو اسکیوال 2008 منتقل کنم.ممنون می شم اگه جواب بدید

  1. No trackbacks yet.

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: