মাইএসকিউএল পিভট: সারিগুলিকে কলামে ঘোরানো

Mysql Pivot Rotating Rows Columns



একটি ডাটাবেস টেবিল বিভিন্ন ধরণের ডেটা সংরক্ষণ করতে পারে এবং কখনও কখনও আমাদের সারি-স্তরের ডেটাকে কলাম-স্তরের ডেটাতে রূপান্তর করতে হয়। PIVOT () ফাংশন ব্যবহার করে এই সমস্যার সমাধান করা যেতে পারে। এই ফাংশনটি টেবিলের সারিগুলিকে কলামের মানগুলিতে ঘোরানোর জন্য ব্যবহৃত হয়। কিন্তু এই ফাংশনটি খুব কম ডাটাবেস সার্ভার দ্বারা সমর্থিত, যেমন ওরাকল বা এসকিউএল সার্ভার। যদি আপনি মাইএসকিউএল ডাটাবেস টেবিলে একই কাজ করতে চান তাহলে সারিগুলিকে কলামে ঘোরানোর জন্য CASE স্টেটমেন্ট ব্যবহার করে SELECT ক্যোয়ারী লিখতে হবে। নিবন্ধটি সম্পর্কিত মাইএসকিউএল ডাটাবেস টেবিলের মধ্যে PIVOT () ফাংশনের কাজটি করার উপায় দেখায়।

পূর্বশর্ত:

আপনাকে একটি ডাটাবেস এবং কিছু সম্পর্কিত টেবিল তৈরি করতে হবে যেখানে এক টেবিলের সারিগুলি PIVOT () ফাংশনের মতো কলামে রূপান্তরিত হবে। 'নামে একটি ডাটাবেস তৈরি করতে নিম্নলিখিত এসকিউএল স্টেটমেন্টগুলি চালান unidb এবং 'নামে তিনটি টেবিল তৈরি করুন ছাত্র ',' পাঠ্যধারাগুলি ' এবং ' ফলাফল '। ছাত্র এবং ফলাফল টেবিলগুলি এক-থেকে-অনেক সম্পর্কের দ্বারা সম্পর্কিত হবে এবং পাঠ্যধারাগুলি এবং ফলাফল টেবিল এখানে এক থেকে অনেক সম্পর্ক দ্বারা সম্পর্কিত হবে। এর বিবৃতি তৈরি করুন ফলাফল টেবিলে ক্ষেত্রগুলির জন্য দুটি বিদেশী কী সীমাবদ্ধতা রয়েছে, std_id , এবং কোর্স_আইডি







ডেটাবেজ ইউনিড তৈরি করুন;
ইউআইডিবি ব্যবহার করুন;

টেবিল ছাত্র তৈরি করুন(
আইডিপ্রাথমিক প্রাথমিক কী,
নাম varchar(পঞ্চাশ)নাল না,
বিভাগ VARCHAR(পনের)নাল না);

টেবিল কোর্স তৈরি করুন(
course_id VARCHAR(বিশ)প্রাথমিক কী,
নাম varchar(পঞ্চাশ)নাল না,
ক্রেডিট SMALLINT নট);

টেবিলের ফলাফল তৈরি করুন(
std_id সম্পূর্ণ নয়,
course_id VARCHAR(বিশ)নাল না,
mark_type VARCHAR(বিশ)নাল না,
চিহ্নগুলি ছোট নয়,
বিদেশী চাবি(std_id)রেফারেন্স ছাত্র(আইডি),
বিদেশী চাবি(কোর্স_আইডি)রেফারেন্স কোর্স(কোর্স_আইডি),
প্রাথমিক কী(std_id, course_id, mark_type));

কিছু রেকর্ড ertোকান ছাত্র, কোর্স এবং ফলাফল টেবিল টেবিল তৈরির সময় নির্ধারিত সীমাবদ্ধতার উপর ভিত্তি করে মানগুলি সারণীতে সন্নিবেশিত করতে হবে।



শিক্ষার্থীদের মান সন্নিবেশ করান
( '1937463','হারপার লি','সিএসই'),
( '1937464','গার্সিয়া মার্কেজ','সিএসই'),
( '1937465','ফরস্টার, ইএম।','সিএসই'),
( '1937466','রালফ এলিসন','সিএসই');

কোর্সের মান অন্তর্ভুক্ত করুন
( 'সিএসই -401','অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং',3),
( 'সিএসই -403','তথ্য কাঠামো',2),
( 'সিএসই -407','ইউনিক্স প্রোগ্রামিং',2);

ফলাফলের মান সন্নিবেশ করান
( '1937463','সিএসই -401','অভ্যন্তরীণ পরীক্ষা',পনের),
( '1937463','সিএসই -401','মধ্যবর্তী পরীক্ষা',বিশ),
( '1937463','সিএসই -401','চূড়ান্ত পরীক্ষা',35),
( '1937464','সিএসই -403','অভ্যন্তরীণ পরীক্ষা',17),
( '1937464','সিএসই -403','মধ্যবর্তী পরীক্ষা',পনের),
( '1937464','সিএসই -403','চূড়ান্ত পরীক্ষা',30),
( '1937465','সিএসই -401','অভ্যন্তরীণ পরীক্ষা',18),
( '1937465','সিএসই -401','মধ্যবর্তী পরীক্ষা',2. 3),
( '1937465','সিএসই -401','চূড়ান্ত পরীক্ষা',38),
( '1937466','সিএসই -407','অভ্যন্তরীণ পরীক্ষা',বিশ),
( '1937466','সিএসই -407','মধ্যবর্তী পরীক্ষা',22),
( '1937466','সিএসই -407','চূড়ান্ত পরীক্ষা',40);

এখানে, ফলাফল টেবিলে একাধিক একই মান রয়েছে std_id , mark_type এবং কোর্স_আইডি প্রতিটি সারিতে কলাম। কিভাবে এই সারিগুলিকে এই টেবিলের কলামে রূপান্তরিত করা যায় তা আরও সংগঠিত বিন্যাসে ডেটা প্রদর্শনের জন্য এই টিউটোরিয়ালের পরবর্তী অংশে দেখানো হয়েছে।



CASE স্টেটমেন্ট ব্যবহার করে সারিগুলিকে কলামে ঘোরান:

এর সমস্ত রেকর্ড প্রদর্শন করতে নিম্নলিখিত সহজ SELECT স্টেটমেন্টটি চালান ফলাফল টেবিল





নির্বাচন করুন*ফলাফল থেকে;

আউটপুট চারটি শিক্ষার্থীর তিনটি কোর্সের তিনটি পরীক্ষার ধরন দেখায়। সুতরাং এর মান std_id , কোর্স_আইডি এবং mark_type বিভিন্ন ছাত্র, কোর্স এবং পরীক্ষার ধরনগুলির জন্য একাধিকবার পুনরাবৃত্তি করা হয়।



CASE স্টেটমেন্ট ব্যবহার করে SELECT ক্যোয়ারী আরো দক্ষতার সাথে লিখতে পারলে আউটপুট আরও বেশি পঠনযোগ্য হবে। CASE স্টেটমেন্ট সহ নিচের SELECT সারির পুনরাবৃত্ত মানগুলিকে কলামের নামগুলিতে রূপান্তরিত করবে এবং ব্যবহারকারীর জন্য আরও বোধগম্য বিন্যাসে টেবিলের বিষয়বস্তু প্রদর্শন করবে।

SELECT result.std_id, result.course_id,
সর্বোচ্চ(CASE WHEN result.mark_type ='অভ্যন্তরীণ পরীক্ষা'তারপর ফলাফল। চিহ্ন শেষ) 'অভ্যন্তরীণ পরীক্ষা',
সর্বোচ্চ(CASE WHEN result.mark_type ='মধ্যবর্তী পরীক্ষা'তারপর ফলাফল। চিহ্ন শেষ) 'মধ্যবর্তী পরীক্ষা',
সর্বোচ্চ(CASE WHEN result.mark_type ='চূড়ান্ত পরীক্ষা'তারপর ফলাফল। চিহ্ন শেষ) 'চূড়ান্ত পরীক্ষা'
ফলাফল থেকে
GROUP BY result.std_id, result.course_id
Result.std_id, result.course_id ASC দ্বারা অর্ডার করুন;

উপরের স্টেটমেন্টটি চালানোর পর নিচের আউটপুটটি প্রদর্শিত হবে যা আগের আউটপুটের চেয়ে বেশি পাঠযোগ্য।

CASE এবং SUM () ব্যবহার করে সারিতে কলামে ঘোরান:

আপনি যদি টেবিল থেকে প্রতিটি শিক্ষার্থীর প্রতিটি কোর্সের মোট সংখ্যা গণনা করতে চান তাহলে আপনাকে সামগ্রিক ফাংশন ব্যবহার করতে হবে যোগফল () দ্বারা গ্রুপ std_id এবং কোর্স_আইডি কেস বিবৃতি সহ। SUM () ফাংশন এবং GROUP BY ক্লজ দিয়ে আগের ক্যোয়ারী পরিবর্তন করে নিম্নলিখিত প্রশ্নটি তৈরি করা হয়েছে।

SELECT result.std_id, result.course_id,
সর্বোচ্চ(CASE WHEN result.mark_type ='অভ্যন্তরীণ পরীক্ষা'তারপর ফলাফল। চিহ্ন শেষ) 'অভ্যন্তরীণ পরীক্ষা',
সর্বোচ্চ(CASE WHEN result.mark_type ='মধ্যবর্তী পরীক্ষা'তারপর ফলাফল। চিহ্ন শেষ) 'মধ্যবর্তী পরীক্ষা',
সর্বোচ্চ(CASE WHEN result.mark_type ='চূড়ান্ত পরীক্ষা'তারপর ফলাফল। চিহ্ন শেষ) 'চূড়ান্ত পরীক্ষা',
যোগফল(ফলাফল চিহ্ন) হিসাবেমোট
ফলাফল থেকে
GROUP BY result.std_id, result.course_id
Result.std_id, result.course_id ASC দ্বারা অর্ডার করুন;

আউটপুট নামে একটি নতুন কলাম দেখায় মোট যেটি প্রতিটি নির্দিষ্ট ছাত্র দ্বারা প্রাপ্ত প্রতিটি কোর্সের সকল পরীক্ষার ধরনগুলির সমষ্টি প্রদর্শন করছে।

একাধিক টেবিলে সারিগুলি কলামে ঘোরান:

পূর্ববর্তী দুটি প্রশ্ন প্রয়োগ করা হয় ফলাফল টেবিল এই টেবিলটি অন্য দুটি টেবিলের সাথে সম্পর্কিত। এইগুলো ছাত্র এবং পাঠ্যধারাগুলি । যদি আপনি ছাত্র আইডি এর পরিবর্তে ছাত্রের নাম এবং কোর্স আইডি এর পরিবর্তে শিক্ষার্থীর নাম প্রদর্শন করতে চান তাহলে আপনাকে তিনটি সম্পর্কিত টেবিল ব্যবহার করে SELECT ক্যোয়ারী লিখতে হবে, ছাত্র , পাঠ্যধারাগুলি এবং ফলাফল । FORM ক্লজের পরে তিনটি টেবিলের নাম যোগ করে এবং তিনটি টেবিল থেকে ডেটা পুনরুদ্ধার করতে এবং আগের SELECT ক্যোয়ারীর তুলনায় আরো উপযুক্ত আউটপুট উৎপন্ন করার জন্য WHERE ক্লজে উপযুক্ত শর্তাবলী নির্ধারণ করে নিম্নলিখিত SELECT ক্যোয়ারী তৈরি করা হয়েছে।

শিক্ষার্থীদের নাম নির্বাচন করুনহিসাবে 'শিক্ষার্থীর নাম', কোর্সের নামহিসাবে 'কোর্সের নাম',
সর্বোচ্চ(CASE WHEN result.mark_type ='অভ্যন্তরীণ পরীক্ষা'তারপর ফলাফল। চিহ্ন শেষ) 'সিটি',
সর্বোচ্চ(CASE WHEN result.mark_type ='মধ্যবর্তী পরীক্ষা'তারপর ফলাফল। চিহ্ন শেষ) 'মধ্য',
সর্বোচ্চ(CASE WHEN result.mark_type ='চূড়ান্ত পরীক্ষা'তারপর ফলাফল। চিহ্ন শেষ) 'ফাইনাল',
যোগফল(ফলাফল চিহ্ন) হিসাবেমোট
শিক্ষার্থীদের থেকে, কোর্স, ফলাফল
যেখানে result.std_id = students.id এবং result.course_id = course.course_id
GROUP BY result.std_id, result.course_id
Result.std_id, result.course_id ASC দ্বারা অর্ডার করুন;

উপরের ক্যোয়ারী চালানোর পর নিম্নলিখিত আউটপুট তৈরি হবে।

উপসংহার:

মাইএসকিউএলে পিভট () ফাংশনের সমর্থন ছাড়াই আপনি কীভাবে পিভট () ফাংশনের কার্যকারিতা বাস্তবায়ন করতে পারেন তা এই নিবন্ধে কিছু ডামি ডেটা ব্যবহার করে দেখানো হয়েছে। আমি আশা করি, পাঠকরা এই নিবন্ধটি পড়ার পরে SELECT ক্যোয়ারী ব্যবহার করে যেকোনো সারি-স্তরের ডেটাকে কলাম-স্তরের ডেটাতে রূপান্তর করতে সক্ষম হবেন।