কম্পিউটার টিউটোরিয়াল

SQL Server-এ PIVOT ক্লজ

SQL Server (Transact-SQL)-এ PIVOT ক্লজ ক্রস ট্যাবুলেশন অনুমতি দেয় যাতে একটি টেবিল থেকে ডেটা অন্য টেবিলে স্থানান্তর করা যায়, অর্থাৎ যোগফল ফলাফল পাওয়া যায় এবং সারি থেকে কলামে রূপান্তর করা যায়।

SQL Server-এ PIVOT ক্লজ
উদাহরণ: যোগফল ক্যালকুলেট করে সারি থেকে কলামে ডেটা টেবিলে ট্রান্সফার

PIVOT ক্লজ সিনট্যাক্স

SELECT cot_dautien AS bidanh_cot_dautien,
[giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n]
FROM
(SELECT ... FROM bang_nguon) AS bidanh_bang_nguon
PIVOT
(
 ham_tong (cot_tong)
 FOR cot_chuyen IN ([giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n])
) AS bidanh_bang_chuyen;

ভেরিয়েবল নাম বা মান

cot_dautien

যে কলাম বা এক্সপ্রেশন ট্রান্সফারের পর নতুন টেবিলে প্রথম কলাম হবে।

bidanh_cot_dautien

ট্রান্সফারের পর নতুন টেবিলে প্রথম কলামের নাম।

giatri_chuyen1, giatri_chuyen2, ... giatri_chuyen_n

ট্রান্সফার করার মান গুলোর তালিকা।

bang_nguon

নতুন টেবিলে সোর্স ডেটা (প্রাথমিক ডেটা) নেওয়ার জন্য SELECT স্টেটমেন্ট।

bidanh_bang_nguon

bang_nguon-এর অ্যালিয়াস।

ham_tong

SUM, COUNT, MIN, MAX বা AVG যেন যোগফল ফাংশন।

cot_tong

ham_tong সাথে ব্যবহৃত কলাম বা এক্সপ্রেশন।

cot_chuyen

যে কলামে ট্রান্সফার করার মান রয়েছে।

bidanh_bang_chuyen

ট্রান্সফারের পর টেবিলের অ্যালিয়াস।

PIVOT ক্লজ SQL Server-এর পরবর্তী ভার্সনগুলিতে ব্যবহার করা যায়: SQL Server 2014, 2012, 2008 R2, 2008, এবং 2005।

টিউটোরিয়ালের ধাপগুলো অনুসরণ করতে, আর্টিকেলের শেষে DDL (টেবিল তৈরির কমান্ড) এবং DML (ডেটা তৈরির কমান্ড) সেকশন দেখুন এবং নিজের ডেটাবেজে চেষ্টা করুন।

PIVOT ক্লজের সাথে উদাহরণ

আমাদের নিচের ডেটা সহ একটি টেবিল আছে।

so_nhanvienhotenluongid_phong
12009NguyenHuong5400045
34974PhamHoa8000045
34987PhanLan4200045
45001TranHua5750030
75623VuHong6500030

নিচের SQL কমান্ড চালিয়ে PIVOT ক্লজ দিয়ে ক্রস কোয়েরি তৈরি করুন।

SELECT 'TongLuong' AS TongLuongTheoPhong,
[30], [45]
FROM
(SELECT id_phong, luong
FROM nhanvien) AS BangNguon
PIVOT
(
 SUM(luong)
 FOR id_phong IN ([30], [45])
) AS BangChuyen;

ফেরত দেওয়া ফলাফল নিচের মতো দেখাবে।

TongLuongTheoPhong3045
TongLuong122500176000

উপরের উদাহরণ ডেটা ট্রান্সফারের পর একটি টেবিল তৈরি করে, যেখানে আইডি ৩০ ও ৪৫ वाले রুমের মোট বেতন দেখানো হয়েছে। ফলাফল এক সারিতে ২ কলামে রয়েছে, প্রতিটি কলাম ১ রুম।

ক্রস কোয়েরির নতুন টেবিলে কলাম নির্দিষ্ট করা

প্রথমে নির্ধারণ করতে হবে ক্রস কোয়েরির টেবিলে কোন ইনফরমেশন ফিল্ড গুলো থাকবে। এই উদাহরণে, TongLuong প্রথম কলাম, তারপর ২টি কলাম id_phong 30 এবং id_phong 45।

SELECT 'TongLuong' AS TongLuongTheoPhong,
[30], [45]

সোর্স টেবিলের ডেটা নির্ধারণ করা

পরবর্তী ধাপে নতুন টেবিলের জন্য সোর্স ডেটা রিটার্ন করা SELECT স্টেটমেন্ট।

এই উদাহরণে, এটি id_phong এবং luong nhanvien টেবিল থেকে।

(SELECT id_phong, luong
FROM nhanvien) AS BangNguon

সোর্স কোয়েরির জন্য অ্যালিয়াস নির্দিষ্ট করতে হবে, এই উদাহরণে BangNguon।

যোগফল ক্যালকুলেশন ফাংশন নির্ধারণ করা

ক্রস কোয়েরিতে ব্যবহৃত ফাংশন গুলো: SUM, COUNT, MIN, MAX এবং AVG। এই উদাহরণে SUM ফাংশন।

PIVOT
(SUM(luong)

ট্রান্সফার করার মান নির্ধারণ করা

শেষে, ফলাফল অন্তর্ভুক্ত করার জন্য যেই মান ট্রান্সফার করতে হবে। এটি ক্রস কোয়েরিতে কলাম হেডার হবে।

এই উদাহরণে, আমরা শুধু id_phong 30 এবং 45 রিটার্ন চাই। এই মান গুলো নতুন টেবিলে কলামের নাম হবে। মনে রাখবেন এই মান গুলো id_phong-এর সীমিত মানের তালিকা এবং সব মান থাকতে বাধ্য নয়।

FOR id_phong IN ([30], [45])

উদাহরণের জন্য DDL / DML

যদি আপনার ডেটাবেজ থাকে এবং উপরের PIVOT ইনস্ট্রাকশন ম্যানুয়ালের উদাহরণগুলো ট্রাই করতে চান, তবে DDL / DML প্রয়োজন।

DDL - Data Definition Language হল PIVOT ক্লজ উদাহরণে ব্যবহারের জন্য টেবিল তৈরির কমান্ড (CREATE TABLE)।

CREATE TABLE phong
( id_phong INT NOT NULL,
ten_phong VARCHAR(50) NOT NULL,
CONSTRAINT pk_phong PRIMARY KEY (id_phong)
) ;
CREATE TABLE nhanvien
( so_nhanvien INT NOT NULL,
ho VARCHAR(50) NOT NULL,
ten VARCHAR(50) NOT NULL,
luong INT,
id_phong INT,
CONSTRAINT pk_nhanvien PRIMARY KEY (so_nhanvien)
) ;

DML - Data Manipulation Language হল টেবিলের জন্য প্রয়োজনীয় ডেটা তৈরি করার INSERT স্টেটমেন্ট।

INSERT INTO phong
(id_phong, ten_phong)
VALUES
(30, 'Ketoan');
INSERT INTO phong
(id_phong, ten_phong)
VALUES
(45, 'Banhang');
INSERT INTO nhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(12009, 'Nguyen', 'Huong', 54000, 45);
INSERT INTO nhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(34974, 'Pham', 'Hoa', 80000, 45);
INSERT INTO nhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(34987, 'Phan', 'Lan', 42000, 45);
INSERT INTO nhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(45001, 'Tran', 'Hua', 57500, 30);
INSERT INTO nhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(75623, 'Vu', 'Hong', 65000, 30);
  1. SQL Server-এ DISTINCT ক্লজ

  2. SQL Server-এ ORDER BY ক্লজ

  3. SQL Server-এ WHERE ক্লজ

  4. SQL Server-এ FROM ক্লজ