MySQL Interchange Logic (Row to Column) & (Column to Row )
|इस Article में हम Interchange Logic को 3 पॉइंट समझेंगे
1. Rows to Columns Interchange Using SQL (SQL Row se Column kaise banaye?)
2. Rows to Columns Interchange Using Trigger (Trigger se Row se Column kaise banaye?)
3. Columns to Rows Interchange Using SQL (Column se row kaise banaye?)
1. Rows Into Columns Interchange Logic
कोई भी प्रोजेक्ट में कार्य करते समय हमें कोई रिपोर्ट या कुछ इस प्रकार से Query लगती हैं जिसमे जो डाटा ROW में हैं उसे COLUMN में Change करना होता हैं, वैसे तो PIVOT का उपयोग कर भी आप इस प्रॉब्लम को Solve कर सकते हैं , यहाँ पर हम Basic SQL का उपयोग कर कैसे इस तरह की problem को Solve करते हैं आइये देखते हैं
Ex: हमारे पास एक टेबल हैं जिसमे की student की बकाया फी के बारे में जानकारी Store हैं, जो की इस प्रकार हैं
यहाँ पर installment_no ROW में Store हैं अब हम एक Query से Row के डाटा को Column में ले जायेंगे
Split rows into columns in MySQL
SELECT scholar_no,
sum( (case installment_no when 1 then fee_amt else 0 end)) as inst_1,
sum( (case installment_no when 2 then fee_amt else 0 end)) as inst_2,
sum( (case installment_no when 3 then fee_amt else 0 end)) as inst_3,
sum( (case installment_no when 4 then fee_amt else 0 end)) as inst_4
from
fee_due
group by scholar_no
यहाँ पर हमने Aggregate Function का उपयोग किया हैं , और यदि हम Aggregate Function के साथ किसी कॉलम को लिखते हैं तो हमें Group By में उन कॉलम के नाम लिखने होते हैं, इसलिए हमने scholar_no को Group By में लिखा हैं । इस Query का Output इस प्रकार होगा ।
This Example For Convert Rows into Column Without Pivot
यहाँ पर देखिये Installment_no का डाटा 1,2,3,4 जो की Row में Store था उसे Query चला कर हमने उसके लिए अलग – अलग कॉलम बना दिए हैं,
यह SQL Sybase, SQL Server, My SQL और भी बहुत से Database में कार्य कर सकता हैं ।
Video के माध्यम से देखने के लिए यहा ओर क्लिक करे
हमारे अन्य आर्टिकल
- Learn C – हिंदी में
- MySQL Aggregate Function in Hindi
- MySQL SYS_EXEC Example With Trigger
- GET & POST Method | Difference Between GET & POST
- PHP Validation | filter_var | preg_match
2 . Rows Into Columns Interchange Using Trigger
इस Problem के solution के लिए हमें दो टेबल लगेगी, पहली जिस टेबल में Installation Number Row में हैं और दूसरी Table जिसमे Installation Number के लिए अलग अलग कॉलम बने हो ।
अब हमें First टेबल जिससे डाटा ले जाना हैं उस पर 3 ट्रिगर लिखना होंगे
पहला Insert के समय, दूसरा Update के समय और तीसरा Delete के समय
Insert के समय
- इन्सर्ट के समय हमें सबसे पहले यह देखना होगा की जिस स्कॉलर नंबर की एंट्री हो रही हैं इस स्कॉलर नंबर और इन्सटॉलमेंट पर यदि पहले से डाटा हो तो उसकी राशि को अपडेट करना
- दूसरा यदि डाटा पहले से नहीं हो तो केवल Insert करना
Update के समय
- अपडेट के समय हमें पुरानी वैल्यू को Minus करना हैं
- और नयी वैल्यू पर देखना हैं की पहले से यह डाटा हो तो Update करना हैं और नहीं हो तो Insert करना हैं
Delete के समय
- डिलीट के समय हमें केवल वैल्यू को Minus करना होता हैं ।
//First Table
CREATE TABLE IF NOT EXISTS `fee_due` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`scholar_no` int(9) NOT NULL,
`installment_no` int(2) NOT NULL,
`fee_amt` decimal(9,2) NOT NULL,
PRIMARY KEY (`id`)
)
// Second Table Which is Update By Trigger
CREATE TABLE IF NOT EXISTS `fee_due_col` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`scholar_no` int(9) NOT NULL,
`inst_1` decimal(9,2) NOT NULL DEFAULT 0.00,
`inst_2` decimal(9,2) NOT NULL DEFAULT 0.00,
`inst_3` decimal(9,2) NOT NULL DEFAULT 0.00,
`inst_4` decimal(9,2) NOT NULL DEFAULT 0.00,
PRIMARY KEY (`scholar_no`),
UNIQUE KEY `id_idx` (`id`)
)
// After Insert
CREATE TRIGGER `fee_due_ai` AFTER INSERT ON `fee_due`
FOR EACH ROW BEGIN
if (new.installment_no = 1 ) THEN
insert into fee_due_col (scholar_no, inst_1) value (new.scholar_no, new.fee_amt)
on duplicate key update inst_1 = inst_1 + new.fee_amt;
elseif (new.installment_no = 2 ) THEN
insert into fee_due_col (scholar_no, inst_2) value (new.scholar_no, new.fee_amt)
on duplicate key update inst_2 = inst_2 + new.fee_amt;
elseif (new.installment_no = 3 ) THEN
insert into fee_due_col (scholar_no, inst_3) value (new.scholar_no, new.fee_amt)
on duplicate key update inst_3 = inst_3 + new.fee_amt
;
ELSE
insert into fee_due_col (scholar_no, inst_4) value (new.scholar_no, new.fee_amt)
on duplicate key update inst_4 = inst_4 + new.fee_amt;
end IF;
END
//After Update
CREATE TRIGGER `fee_due_au` AFTER UPDATE ON `fee_due`
FOR EACH ROW BEGIN
if (old.installment_no = 1 ) THEN
update fee_due_col set inst_1 = inst_1 - old.fee_amt
where scholar_no = old.scholar_no;
elseif (old.installment_no = 2 ) THEN
update fee_due_col set inst_2 = inst_2 - old.fee_amt
where scholar_no = old.scholar_no;
elseif (old.installment_no = 3 ) THEN
update fee_due_col set inst_3 = inst_3 - old.fee_amt
where scholar_no = old.scholar_no;
ELSE
update fee_due_col set inst_4 = inst_4 - old.fee_amt
where scholar_no = old.scholar_no;
END IF;
if (new.installment_no = 1 ) THEN
insert into fee_due_col (scholar_no, inst_1) value (new.scholar_no, new.fee_amt)
on duplicate key update inst_1 = inst_1 + new.fee_amt
;
elseif (new.installment_no = 2 ) THEN
insert into fee_due_col (scholar_no, inst_2) value (new.scholar_no, new.fee_amt)
on duplicate key update inst_2 = inst_2 + new.fee_amt
;
elseif (new.installment_no = 3 ) THEN
insert into fee_due_col (scholar_no, inst_3) value (new.scholar_no, new.fee_amt)
on duplicate key update inst_3 = inst_3 + new.fee_amt
;
ELSE
insert into fee_due_col (scholar_no, inst_4) value (new.scholar_no, new.fee_amt)
on duplicate key update inst_4 = inst_4 + new.fee_amt
;
end IF;
END
//After Delete
CREATE TRIGGER `fee_due_ad` AFTER DELETE ON `fee_due`
FOR EACH ROW BEGIN
if (old.installment_no = 1 ) THEN
update fee_due_col set inst_1 = inst_1 - old.fee_amt
where scholar_no = old.scholar_no;
elseif (old.installment_no = 2 ) THEN
update fee_due_col set inst_2 = inst_2 - old.fee_amt
where scholar_no = old.scholar_no;
elseif (old.installment_no = 3 ) THEN
update fee_due_col set inst_3 = inst_3 - old.fee_amt
where scholar_no = old.scholar_no;
ELSE
update fee_due_col set inst_4 = inst_4 - old.fee_amt
where scholar_no = old.scholar_no;
END IF;
END
Video के माध्यम से देखने के लिए यहा पर क्लिक करे
3. Columns Into Rows Interchange Logic
देखिये यहाँ पर हमने एक टेबल बनाई हैं जिसमे installment amount के लिए अलग अलग column बना लिए हैं , अब इसे हम SQL के द्वारा सभी Installment को एक कॉलम में ले आएंगे, और एक Dummy Column बनाएंगे जिसमे हम Installment No को दिखाएंगे ।Table इस प्रकार हैं ।
अब इस SQL से आप Union All की सहायता से एक ही टेबल के अलग अलग Column को जोड़ कर Row बना लेंगे ।
SELECT scholar_no, inst_no, sum(ins_amt) as inst_amt
FROM
(
SELECT scholar_no, inst_1 as ins_amt, 1 as inst_no FROM `fee_due_col`
UNION ALL
SELECT scholar_no, inst_2 as ins_amt, 2 as inst_no FROM `fee_due_col`
UNION ALL
SELECT scholar_no, inst_3 as ins_amt, 3 as inst_no FROM `fee_due_col`
UNION ALL
SELECT scholar_no, inst_4 as ins_amt, 4 as inst_no FROM `fee_due_col`
) a
GROUP BY scholar_no, inst_no
इस SQL को Execute करने के बाद आपको कुछ इस तरह से Result दिखाई देगा
Video के माध्यम से देखने के लिए यह पर क्लिक करे
दोस्तों इस आर्टिकल में हमने Row to Column और Column to Row में बदलना SQL ओर Trigger से समझा हैं , आशा हैं मुझे की आपको ठीक से समझ मे आ गया होगा ।