خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
نحوه استفاده از تابع FIRST_VALUE در SQL Server
تابع FIRST_VALUE در SQL Server یک تابع تحلیلی است که اولین مقدار را در یک Result set از رکوردهای ORDER شده برمی گرداند. تابع FIRST_VALUE برای اولین بار در SQL Server 2012 معرفی شده و Syntax استفاده از این تابع بصورت زیر می باشد.
با مثال عملی از تابع FIRST_VALUE، بهتر عملکرد و استفاده آن را درک خواهیم کرد. پس به سراغ مثال می رویم.
ابتدا یک جدول با نام EMP ایجاد می کنیم و مقادیری را در آن insert خواهیم کرد.
به سراغ اولین مثال از FIRST_VALUE خواهیم رفت که در ساده ترین حالت از FIRST_VALUE می توانید استفاده کنید.
در مثال زیر تابع FIRST_VALUE نام پردرآمدترین کارمند را برمی گرداند و اگر کارمندی دیگری همین شرایط را داشته باشد که مشابه همین فرد حقوق دریافت می کند، آنوقت اسامی آنها Sort می شود که در ORDER BY این کار انجام می شود و سپس نام فرد مربوطه را در خروجی مشاهده خواهید کرد.
حالا مثال دیگری از FIRST_VALUE را مشاهده خواهید کرد. در مثال زیر ، تابع FIRST_VALUE نام پردرآمدترین کارمند در هر بخش را برمی گرداند و اگر بیش از یک کارمند برای هر بخش دارای حقوق یکسان باشد ، رکورد را بر اساس نام کارمند به ترتیب صعودی مرتب می شود.
همانطور که در Result فوق مشاهده می کنید، نام کارمند پردرآمد هر بخش را مشاهده می کنید که در بخش Sales دو نفر با بالاترین حقوق یکسان وجود داشتند و از این رو به ترتیب اسم آنها لیست شدند. در واقع در مثال فوق به نحوه بکارگیری آرگومان اختیاری PARTITION BY در تابع FIRST_VALUE را مشاهده کردید.
LAST_VALUE(Column_Name) OVER ( [partition_by_clause col1, col2,.]
ORDER BY Col1, Col2, ...)
Column_Name
در واقع مقداری که برگشت داده می شود.partition_by_clause
ردیف های Result set را به بخش هایی که تابع به آنها اعمال می شود تقسیم می کند(اختیاری).order_by_clause
ترتیب انجام عملیات را مشخص کنید(اجباری).با مثال عملی از تابع FIRST_VALUE، بهتر عملکرد و استفاده آن را درک خواهیم کرد. پس به سراغ مثال می رویم.
ابتدا یک جدول با نام EMP ایجاد می کنیم و مقادیری را در آن insert خواهیم کرد.
CREATE TABLE dbo.EMP
(EMPID INT PRIMARY KEY,
EMP_DEPT VARCHAR(50),
EMP_NAME VARCHAR(30),
EMP_SALARY NUMERIC(9,2))
INSERT INTO dbo.EMP (
EMPID, EMP_DEPT, EMP_NAME, EMP_SALARY)
VALUES(
101, 'PRODUCTION', 'RAJAT M', 75000.00),
(102, 'PRODUCTION', 'MUKESH BHATIA', 70000.00),
(103, 'PRODUCTION', 'MUSKAN MEHTA', 75000.00),
(104, 'SALES', 'ROHAN B NARAYA', 45000.00),
(105, 'SALES', 'SUSHIL DAS', 40000.00),
(106, 'SALES', 'MANISH', 45000.00),
(107, 'PRODUCTION', 'RAJESH SINGH', 78000.00),
(108, 'HR', 'MOHIN KHAN',50000.00),
(109, 'HR', 'SUSHANT K SINGH', 55000.00),
(110, 'HR', 'LAKSHYA RAWAT', 55000.00),
(111, 'PRODUCTION', 'MANOJ KUMAR', 75000.00),
(112, 'SALES', 'SUJOY M', 40000.00),
(113, 'LOGISTIC', 'VINAY AGARWAL', 35000.00),
(114, 'LOGISTIC', 'MUSTAKIM M', 35000.00),
(115, 'LOGISTIC', 'VIJAY KUMAWAT', 45000.00)
به سراغ اولین مثال از FIRST_VALUE خواهیم رفت که در ساده ترین حالت از FIRST_VALUE می توانید استفاده کنید.
در مثال زیر تابع FIRST_VALUE نام پردرآمدترین کارمند را برمی گرداند و اگر کارمندی دیگری همین شرایط را داشته باشد که مشابه همین فرد حقوق دریافت می کند، آنوقت اسامی آنها Sort می شود که در ORDER BY این کار انجام می شود و سپس نام فرد مربوطه را در خروجی مشاهده خواهید کرد.
SELECT EMPID, EMP_DEPT, EMP_NAME, EMP_SALARY,
FIRST_VALUE(EMP_NAME) OVER (ORDER BY EMP_SALARY DESC, EMP_NAME ) AS FIRSTVALUE
FROM EMP FIRST_VALUE
حالا مثال دیگری از FIRST_VALUE را مشاهده خواهید کرد. در مثال زیر ، تابع FIRST_VALUE نام پردرآمدترین کارمند در هر بخش را برمی گرداند و اگر بیش از یک کارمند برای هر بخش دارای حقوق یکسان باشد ، رکورد را بر اساس نام کارمند به ترتیب صعودی مرتب می شود.
SELECT EMPID, EMP_DEPT, EMP_NAME, EMP_SALARY,
FIRST_VALUE(EMP_NAME)OVER(PARTITION BY EMP_DEPT ORDER BY EMP_SALARY DESC, EMP_NAME ) AS FIRSTVALUE
FROM EMP FIRST_VALUE
همانطور که در Result فوق مشاهده می کنید، نام کارمند پردرآمد هر بخش را مشاهده می کنید که در بخش Sales دو نفر با بالاترین حقوق یکسان وجود داشتند و از این رو به ترتیب اسم آنها لیست شدند. در واقع در مثال فوق به نحوه بکارگیری آرگومان اختیاری PARTITION BY در تابع FIRST_VALUE را مشاهده کردید.
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: