কলামের নাম সহ আনপিবট


127

আমার StudentMarksকলাম সহ একটি টেবিল আছে Name, Maths, Science, English। ডাটা যেমন হয়

Name,  Maths, Science, English  
Tilak, 90,    40,      60  
Raj,   30,    20,      10

আমি এটি নীচের মতো সাজিয়ে তুলতে চাই:

Name,  Subject,  Marks
Tilak, Maths,    90
Tilak, Science,  40
Tilak, English,  60

সঙ্গে unpivot আমি নাম পেতে সক্ষম হই, সঠিকভাবে মার্কস, কিন্তু না উৎস সারণিতে কলামের নামের পেতে সক্ষম Subjectকাঙ্ক্ষিত ফলাফল সেট কলাম।

আমি কীভাবে এটি অর্জন করতে পারি?

আমি এখনও অবধি নিম্নলিখিত কোয়েরিতে পৌঁছেছি (নাম, চিহ্ন পেতে)

select Name, Marks from studentmarks
Unpivot
(
  Marks for details in (Maths, Science, English)

) as UnPvt

1
আপনি এতক্ষণ যা করেছেন তা কি পোস্ট করতে পারবেন? ক্যোয়ারী / আউটপুট।
হার্ট সিও

উত্তর:


204

আপনার জিজ্ঞাসা খুব কাছাকাছি। আপনি নিম্নলিখিতটি ব্যবহার করতে সক্ষম হবেন যা subjectচূড়ান্ত নির্বাচন তালিকার অন্তর্ভুক্ত রয়েছে :

select u.name, u.subject, u.marks
from student s
unpivot
(
  marks
  for subject in (Maths, Science, English)
) u;

ডেমো সহ এসকিউএল ফিডল দেখুন


@ ব্লুফিট এমন কোনও উপায় আছে যা আপনার নাম (গণিত, বিজ্ঞান, ইংরেজি) নির্দিষ্ট করার দরকার নেই? আমি অনেক টেবিলগুলিতে এই অপারেশনটি করছি, সমস্ত একই কাঠামো সহ তবে বিভিন্ন কলামের নাম দিয়ে।
এলবোগার্ড্ট

1
@ এলগোগার্ড্ট না, কলামগুলি অন্তর্ভুক্ত করার জন্য আপনাকে স্পষ্টভাবে সংজ্ঞায়িত করতে হবে।
jjjjjjjjjjjjj

@ এলবোগার্ড এখানে আমার উত্তরটি একবার দেখুন , আপনি কলামের নাম উল্লেখ না করেই আনপিবট করতে ডায়নামিক এসকিএল ব্যবহার করতে পারেন।
Taryn

8

আপনি নিম্নলিখিত কোডের সাথে যুক্তির ক্রম ব্যবহার করে স্ট্যান্ডার্ড স্কয়ার এস-পিভোটিং পদ্ধতিও ব্যবহার করতে পারেন .. নীচের কোডটিতে 3 টি পদক্ষেপ রয়েছে:

  1. ক্রস জয়েন (প্রতিটি ক্ষেত্রে বিষয় কলাম তৈরি করে) ব্যবহার করে প্রতিটি সারির জন্য একাধিক অনুলিপি তৈরি করুন
  2. কলাম "চিহ্ন" তৈরি করুন এবং কেস এক্সপ্রেশন ব্যবহার করে প্রাসঙ্গিক মান পূরণ করুন (উদা: বিষয় যদি বিজ্ঞান হয় তবে বিজ্ঞানের কলাম থেকে মান বেছে নিন)
  3. যে কোনও নাল সংমিশ্রণগুলি সরিয়ে ফেলুন (যদি বিদ্যমান থাকে তবে বেস টেবিলটিতে কড়াভাবে নাল মান না থাকলে টেবিলের অভিব্যক্তি পুরোপুরি এড়ানো যায়)

     select *
     from 
     (
        select name, subject,
        case subject
        when 'Maths' then maths
        when 'Science' then science
        when 'English' then english
        end as Marks
    from studentmarks
    Cross Join (values('Maths'),('Science'),('English')) AS Subjct(Subject)
    )as D
    where marks is not null;

এটি যে কোনও আরডিবিএমএসের সাথেও কাজ করে! ভ্যালু, যখন উপলভ্য না হয়, সেলেক্ট ... ইউনিয়ন ... নির্বাচন করুন ... সেই ক্রস জয়েনের পারফরম্যান্সের বিষয়ে ভাবছেন যদিও ...
ক্রিশটি এস

0

ছাত্র থেকে * নির্বাচন করুন

UNPIVOT ((গণিত, বিজ্ঞান, ইংরেজি) বিষয়সমূহের জন্য চিহ্ন);


1
এটি ইতিমধ্যে প্রায় 6 বছর আগে পোস্ট করা গৃহীত এবং উচ্চ উত্সাহিত উত্তর হিসাবে একই উত্তর?
কালিরিয়ানহুমন072889

0

ক্রস জয়েনের ব্যবহারের অন্য উপায় হ'ল ক্রস জোনের অভ্যন্তরে কলামের নাম উল্লেখ করা

select name, Subject, Marks 
from studentmarks
Cross Join (
values (Maths,'Maths'),(Science,'Science'),(English,'English')
) un(Marks, Subject)
where marks is not null;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.