SQL সার্ভারে (Transact-SQL), PIVOT ক্লজ ক্রস ট্যাবুলেশনকে এক টেবিল থেকে অন্য টেবিলে ডেটা স্থানান্তর করার অনুমতি দেয়, অর্থাৎ, সামগ্রিক ফলাফল পান এবং লাইন থেকে কলামে যেতে পারেন।
৷
উদাহরণ যোগফল গণনা করে এবং তারপর ডেটা টেবিলের কলামগুলিতে সারিগুলি পাস করে
PIVOT ক্লজ সিনট্যাক্স
SELECT cot_dautien AS ,
[giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n]
FROM
() AS
PIVOT
(
ham_tong ()
FOR
IN ([giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n])
) AS n>;
) AS n>;
ভেরিয়েবল নাম বা পরিবর্তনশীল মান
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৷
কলাম বা এক্সপ্রেশন হ্যাম_টং এর সাথে ব্যবহার করা হয়।
cot_chuyen
কলামে স্থানান্তর করার মান রয়েছে৷
bidanh_bang_chuyen
স্থানান্তরের পরে টেবিলের উপনাম৷
৷পিভট ক্লজটি SQL সার্ভারের পরবর্তী সংস্করণগুলিতে ব্যবহার করা যেতে পারে:SQL সার্ভার 2014, SQL সার্ভার 2012, SQL সার্ভার 2008 R2, SQL সার্ভার 2008 এবং SQL সার্ভার 2005৷পি>
টিউটোরিয়ালের ধাপগুলি অনুসরণ করতে, এই নিবন্ধের শেষে টেবিল তৈরি করার জন্য DDL বিভাগ এবং ডেটা তৈরি করার জন্য DML দেখুন এবং তারপর আপনার নিজস্ব ডাটাবেসে চালানোর চেষ্টা করুন। পি>
PIVOT ধারা সহ উদাহরণ
নিচে দেখানো ডেটা সহ আমাদের কাছে টেবিল আছে৷
so_nhan_en_production id_phong 12009 Nguyen Huong 54000 45 34974 Pham Hoa 80000 45 34987 Phan Lan 42000 45 45001 Tran Hua 57500 30 75623 Vu Hong 65000 30 75000 পিভট ধারা।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;
ফেরত ফলাফল নিচের মত দেখাবে।
TongLuongTheoPhong 30 45 TongLuong 122500 176000উপরের উদাহরণটি ডেটা স্থানান্তরিত হওয়ার পরে একটি টেবিল তৈরি করে, যা নির্দেশ করে যে রুমের মোট বেতনের একটি আইডি 30 এবং রুমের একটি ID 45 রয়েছে৷ ফলাফলটি 2টি কলাম সহ একটি সারিতে রয়েছে, প্রতিটি কলাম 1 রুম।
ক্রস-কোয়েরির নতুন টেবিলে কলামটি নির্দিষ্ট করুন
প্রথমে তথ্যের কোন ক্ষেত্র স্থানান্তর টেবিলে অন্তর্ভুক্ত করতে চান তা নির্ধারণ করতে হবে৷ এই উদাহরণে, TongLuong হল প্রথম কলাম, তারপর 2 কলাম id_phong 30 এবং id_phong 45৷
SELECT 'TongLuong' AS TongLuongTheoPhong,
[30], [
45]
উৎস টেবিলে ডেটা নির্ধারণ করুন
এর পরেরটি হল SELECT স্টেটমেন্ট যা নতুন টেবিলের জন্য উৎস ডেটা ফেরত দেবে৷
এই উদাহরণে, এটি id_phong এবং টেবিল থেকে।
(SELECT id_phong, luong
FROM nhanvien) AS Ba
ngNguon
উৎস কোয়েরির উপনাম নির্দিষ্ট করতে হবে, এই উদাহরণে BangNguon।
মোট গণনা ফাংশন নির্ধারণ করুন
ক্রস কোয়েরিতে যে ফাংশনগুলি ব্যবহার করা যেতে পারে সেগুলির মধ্যে SUM, COUNT, MIN, MAX এবং AVG অন্তর্ভুক্ত৷ এই উদাহরণে, যোগফল ফাংশন SUM.
PIVOT
(SUM(luong)
স্থানান্তর করার মান নির্ধারণ করুন
অবশেষে, ফলাফল অন্তর্ভুক্ত করার জন্য মান স্থানান্তর করা প্রয়োজন৷ এটি ক্রস কোয়েরির কলাম হেডার হবে।
এই উদাহরণে, আমাদের শুধুমাত্র id_folder 30 এবং 45 ফেরত দিতে হবে। এই মানগুলো হবে নতুন টেবিলের কলামের নাম। মনে রাখবেন যে এই মানগুলি id_phong-এর সীমিত মানগুলির একটি তালিকা এবং অগত্যা সমস্ত মান ধারণ করে না৷
FOR id_phong IN ([30], [45])
উদাহরণগুলির জন্য DDL / DML
আপনার যদি একটি ডাটাবেস থাকে এবং উপরের PIVOT নির্দেশিকা ম্যানুয়ালটিতে উদাহরণগুলি চেষ্টা করে দেখতে চান, তাহলে আপনার DDL / DML প্রয়োজন হবে৷
DDL - ডেটা সংজ্ঞা ভাষা পিভট ক্লজ উদাহরণে ব্যবহারের জন্য টেবিল তৈরির কমান্ড (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 - ডেটা ম্যানিপুলেশন ভাষা টেবিলের জন্য প্রয়োজনীয় ডেটা তৈরি করার জন্য INSERT বিবৃতি।
INSERTINTO phong
(id_phong, ten_phong)
VALUES
(30, 'Ketoan
');
INSERT INTOphong
(id_phong, ten_phong)
VALUES
(45, 'Banhang');
INSERT INTOnhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(12009, 'Nguye
n', 'Huong', 54000, 45);
INSERT INTOnhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(34974, 'Pham',
'Flowers', 80000, 45);
INSERT INTOanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(34987, 'Phan', 'La
n', 42000, 45);
INSERTINTO nhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
45001, 'Tr
an', 'Hue', 57500, 30);
INSERT INTO home
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(75623, 'Vu', 'Hong'
, 65000, 30);