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

Interchange Logic Rows into Columns

यहाँ पर देखिये Installment_no का डाटा 1,2,3,4 जो की Row में Store था उसे Query चला कर हमने उसके लिए अलग – अलग कॉलम बना दिए हैं,

यह SQL Sybase, SQL Server, My SQL और भी बहुत से Database में कार्य कर सकता हैं ।


Video के माध्यम से देखने के लिए यहा ओर क्लिक करे


हमारे अन्य आर्टिकल


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 दिखाई देगा

Interchange Logic Columns into Rows

Video के माध्यम से देखने के लिए यह पर क्लिक करे


दोस्तों इस आर्टिकल में हमने Row to Column और Column to Row में बदलना SQL ओर Trigger से समझा हैं , आशा हैं मुझे की आपको ठीक से समझ मे आ गया होगा ।

Add a Comment

Your email address will not be published. Required fields are marked *