কোয়েরি রেজাল্টে রো ভ্যালুকে কলাম হেডার বানাতে (Pivot) CASE স্টেটমেন্ট সাথে MAX() অগ্রেগেট ফাংশন ব্যবহার করুন।
সিনট্যাক্স
SELECT yourIdColumnName,
MAX(CASE WHEN yourColumnName1 = 'value1' THEN yourColumnName2 ELSE NULL END) AS 'value1',
MAX(CASE WHEN yourColumnName1 = 'value2' THEN yourColumnName2 ELSE NULL END) AS 'value2',
...
FROM yourTableName
GROUP BY yourIdColumnName
ORDER BY yourIdColumnName;
উদাহরণ দিয়ে বুঝি
টেবিল তৈরি করুন:
mysql> CREATE TABLE valueAsColumn (
-> UserId INT,
-> UserColumn1 VARCHAR(10),
-> UserColumn2 VARCHAR(10)
-> );
Query OK, 0 rows affected (0.75 sec)
রেকর্ড ইনসার্ট করুন:
mysql> INSERT INTO valueAsColumn VALUES(0, 'John', 'A+');
mysql> INSERT INTO valueAsColumn VALUES(0, 'Carol', 'B');
mysql> INSERT INTO valueAsColumn VALUES(0, 'Sam', 'C');
mysql> INSERT INTO valueAsColumn VALUES(1, 'John', 'D');
mysql> INSERT INTO valueAsColumn VALUES(1, 'Carol', 'A');
mysql> INSERT INTO valueAsColumn VALUES(1, 'Carol', 'C');
সোর্স ডেটা:
mysql> SELECT * FROM valueAsColumn;
+--------+-------------+-------------+
| UserId | UserColumn1 | UserColumn2 |
+--------+-------------+-------------+
| 0 | John | A+ |
| 0 | Carol | B |
| 0 | Sam | C |
| 1 | John | D |
| 1 | Carol | A |
| 1 | Carol | C |
+--------+-------------+-------------+
6 rows in set (0.00 sec)
Pivot কোয়েরি (UserColumn1 এর মানকে কলাম বানানো)
mysql> SELECT UserId,
-> MAX(CASE WHEN UserColumn1 = 'John' THEN UserColumn2 ELSE NULL END) AS 'John',
-> MAX(CASE WHEN UserColumn1 = 'Carol' THEN UserColumn2 ELSE NULL END) AS 'Carol',
-> MAX(CASE WHEN UserColumn1 = 'Sam' THEN UserColumn2 ELSE NULL END) AS 'Sam'
-> FROM valueAsColumn
-> GROUP BY UserId
-> ORDER BY UserId;
+--------+------+-------+------+
| UserId | John | Carol | Sam |
+--------+------+-------+------+
| 0 | A+ | B | C |
| 1 | D | C | NULL |
+--------+------+-------+------+
2 rows in set (0.00 sec)
ব্যাখ্যা:
CASE WHEN ... THEN ... ELSE NULL END- শর্তমতো মান বেছে নেয়MAX()- একই গ্রুপে একাধিক মান থাকলে সর্বোচ্চটি নেয় (Non-NULL মান)GROUP BY UserId- UserId অনুযায়ী গ্রুপিং
UserId=1, Carol-এ দুইটি মান (A, C) থাকায় MAX() 'C' রিটার্ন করেছে।