MySQL పివట్: నిలువు వరుసలకు నిలువు వరుసలు

Mysql Pivot Rotating Rows Columns



డేటాబేస్ పట్టిక వివిధ రకాల డేటాను నిల్వ చేయగలదు మరియు కొన్నిసార్లు మనం వరుస-స్థాయి డేటాను కాలమ్-స్థాయి డేటాగా మార్చాలి. ఈ సమస్యను PIVOT () ఫంక్షన్ ఉపయోగించి పరిష్కరించవచ్చు. ఈ ఫంక్షన్ పట్టిక వరుసలను కాలమ్ విలువలుగా తిప్పడానికి ఉపయోగించబడుతుంది. కానీ ఈ ఫంక్షన్‌కు ఒరాకిల్ లేదా SQL సర్వర్ వంటి అతి తక్కువ డేటాబేస్ సర్వర్లు మద్దతు ఇస్తాయి. మీరు MySQL డేటాబేస్ పట్టికలో అదే పనిని చేయాలనుకుంటే, వరుసలను నిలువు వరుసలుగా తిప్పడానికి మీరు CASE స్టేట్‌మెంట్ ఉపయోగించి SELECT ప్రశ్న రాయాలి. సంబంధిత MySQL డేటాబేస్ పట్టికలలో PIVOT () ఫంక్షన్ యొక్క పనిని చేయడానికి వ్యాసం మార్గం చూపుతుంది.

అవసరం:

మీరు ఒక డేటాబేస్ మరియు కొన్ని సంబంధిత పట్టికలను సృష్టించాలి, ఇక్కడ ఒక టేబుల్ యొక్క వరుసలు PIVOT () ఫంక్షన్ వంటి నిలువు వరుసలుగా మార్చబడతాయి. 'అనే డేటాబేస్ సృష్టించడానికి క్రింది SQL స్టేట్‌మెంట్‌లను అమలు చేయండి. unidb 'మరియు' అనే మూడు పట్టికలను సృష్టించండి విద్యార్థులు ',' కోర్సులు 'మరియు' ఫలితం '. విద్యార్థులు మరియు ఫలితం పట్టికలు ఒకటి నుండి అనేక సంబంధాలకు సంబంధించినవి మరియు కోర్సులు మరియు ఫలితాలు పట్టికలు ఇక్కడ ఒకటి నుండి అనేక సంబంధాలకు సంబంధించినవి. యొక్క క్రియేట్ స్టేట్‌మెంట్ ఫలితం పట్టిక ఫీల్డ్‌ల కోసం రెండు విదేశీ కీ అడ్డంకులను కలిగి ఉంది, std_id , మరియు కోర్సు_ఐడి .







డేటాబేస్ యునిడిబిని సృష్టించండి;
యునిడిబిని ఉపయోగించండి;

టేబుల్ విద్యార్థులను సృష్టించండి(
idINT ప్రాథమిక కీ,
పేరు varchar(యాభై)శూన్యమైనది కాదు,
విభాగం వార్చర్(పదిహేను)శూన్యము కాదు);

టేబుల్ కోర్సులు సృష్టించండి(
కోర్సు_ఐడి వార్చర్(ఇరవై)ప్రాథమిక కీ,
పేరు varchar(యాభై)శూన్యమైనది కాదు,
క్రెడిట్ చిన్నది కాదు);

పట్టిక ఫలితాన్ని సృష్టించండి(
std_id INT శూన్యమైనది కాదు,
కోర్సు_ఐడి వార్చర్(ఇరవై)శూన్యమైనది కాదు,
మార్క్_టైప్ VARCHAR(ఇరవై)శూన్యమైనది కాదు,
చిన్నదిగా మార్కులు శూన్యం,
విదేశీ కీ(std_id)విద్యార్థులను సూచిస్తుంది(id),
విదేశీ కీ(కోర్సు_ఐడి)రిఫరెన్స్ కోర్సులు(కోర్సు_ఐడి),
ప్రాథమిక కీ(std_id, కోర్సు_ఐడి, మార్క్_టైప్));

కొన్ని రికార్డులను చొప్పించండి విద్యార్థులు, కోర్సులు మరియు ఫలితం పట్టికలు. పట్టిక సృష్టించే సమయంలో సెట్ చేయబడిన పరిమితుల ఆధారంగా విలువలను తప్పనిసరిగా పట్టికలలో చేర్చాలి.



విద్యార్థుల విలువలను చేర్చండి
( '1937463','హార్పర్ లీ','CSE'),
( '1937464','గార్సియా మార్క్వెజ్','CSE'),
( '1937465','ఫోర్స్టర్, ఇ.ఎమ్.','CSE'),
( '1937466','రాల్ఫ్ ఎల్లిసన్','CSE');

కోర్సుల విలువలను చేర్చండి
( 'CSE-401','ఆబ్జెక్ట్ ఓరియెంటెడ్ ప్రోగ్రామింగ్',3),
( 'CSE-403','డేటా స్ట్రక్చర్',2),
( 'CSE-407','యునిక్స్ ప్రోగ్రామింగ్',2);

ఫలితాల విలువలను చేర్చండి
( '1937463','CSE-401','అంతర్గత పరీక్ష',పదిహేను),
( '1937463','CSE-401','మధ్యంతర పరీక్ష',ఇరవై),
( '1937463','CSE-401','తుది పరీక్ష',35),
( '1937464','CSE-403','అంతర్గత పరీక్ష',17),
( '1937464','CSE-403','మధ్యంతర పరీక్ష',పదిహేను),
( '1937464','CSE-403','తుది పరీక్ష',30),
( '1937465','CSE-401','అంతర్గత పరీక్ష',18),
( '1937465','CSE-401','మధ్యంతర పరీక్ష',2. 3),
( '1937465','CSE-401','తుది పరీక్ష',38),
( '1937466','CSE-407','అంతర్గత పరీక్ష',ఇరవై),
( '1937466','CSE-407','మధ్యంతర పరీక్ష',22),
( '1937466','CSE-407','తుది పరీక్ష',40);

ఇక్కడ, ఫలితం పట్టికలో బహుళ ఒకే విలువలు ఉన్నాయి std_id , మార్క్_టైప్ మరియు కోర్సు_ఐడి ప్రతి వరుసలో నిలువు వరుసలు. మరింత క్రమబద్ధమైన ఆకృతిలో డేటాను ప్రదర్శించడానికి ఈ వరుసలను ఈ పట్టికలోని నిలువు వరుసలుగా ఎలా మార్చాలి అనేది ఈ ట్యుటోరియల్ యొక్క తదుపరి భాగంలో చూపబడింది.



CASE స్టేట్‌మెంట్‌ని ఉపయోగించి అడ్డు వరుసలను నిలువు వరుసలకు తిప్పండి:

యొక్క అన్ని రికార్డులను ప్రదర్శించడానికి క్రింది సాధారణ ఎంపిక ప్రకటనను అమలు చేయండి ఫలితం పట్టిక.





ఎంచుకోండి*ఫలితం నుండి;

అవుట్పుట్ మూడు కోర్సుల మూడు రకాల పరీక్షలకు నలుగురు విద్యార్థుల మార్కులను చూపుతుంది. కాబట్టి విలువలు std_id , కోర్సు_ఐడి మరియు మార్క్_టైప్ వివిధ విద్యార్థులు, కోర్సులు మరియు పరీక్ష రకాల కోసం అనేకసార్లు పునరావృతమవుతాయి.



CASE స్టేట్‌మెంట్‌ను ఉపయోగించడం ద్వారా SELECT ప్రశ్నను మరింత సమర్ధవంతంగా రాయగలిగితే అవుట్‌పుట్ మరింత చదవదగినదిగా ఉంటుంది. CASE స్టేట్‌మెంట్‌తో ఈ క్రింది SELECT వరుసల యొక్క పునరావృత విలువలను కాలమ్ పేర్లలోకి మారుస్తుంది మరియు వినియోగదారులకు మరింత అర్థమయ్యే ఫార్మాట్‌లో పట్టికల కంటెంట్‌ని ప్రదర్శిస్తుంది.

ఫలితాన్ని ఎంచుకోండి. Std_id, result.course_id,
MAX(ఫలితము వచ్చినప్పుడు కేస్ చేయండి. Mark_type ='అంతర్గత పరీక్ష'అప్పుడు ఫలితం.మార్కులు ముగిశాయి) 'అంతర్గత పరీక్ష',
MAX(ఫలితము వచ్చినప్పుడు కేస్ చేయండి. Mark_type ='మధ్యంతర పరీక్ష'అప్పుడు ఫలితం.మార్కులు ముగిశాయి) 'మధ్యంతర పరీక్ష',
MAX(ఫలితము వచ్చినప్పుడు కేస్ చేయండి. Mark_type ='తుది పరీక్ష'అప్పుడు ఫలితం.మార్కులు ముగిశాయి) 'తుది పరీక్ష'
ఫలితం నుండి
ఫలితం ద్వారా గుంపు. Std_id, result.course_id
ఫలితం ద్వారా ఆర్డర్ చేయండి. Std_id, result.course_id ASC;

మునుపటి అవుట్‌పుట్ కంటే ఎక్కువ చదవగలిగేలా ఉన్న స్టేట్‌మెంట్‌ను అమలు చేసిన తర్వాత కింది అవుట్‌పుట్ కనిపిస్తుంది.

CASE మరియు SUM () ఉపయోగించి నిలువు వరుసలను అడ్డు వరుసలకు తిప్పండి:

మీరు టేబుల్ నుండి ప్రతి విద్యార్థి యొక్క ప్రతి కోర్సు యొక్క మొత్తం సంఖ్యను లెక్కించాలనుకుంటే, మీరు మొత్తం ఫంక్షన్‌ను ఉపయోగించాలి SUM () ద్వారా సమూహం std_id మరియు కోర్సు_ఐడి CASE ప్రకటనతో. SUM () ఫంక్షన్ మరియు గ్రూప్ బై గ్రూప్‌తో మునుపటి ప్రశ్నను సవరించడం ద్వారా కింది ప్రశ్న సృష్టించబడింది.

ఫలితాన్ని ఎంచుకోండి. Std_id, result.course_id,
MAX(ఫలితము వచ్చినప్పుడు కేస్ చేయండి. Mark_type ='అంతర్గత పరీక్ష'అప్పుడు ఫలితం.మార్కులు ముగిశాయి) 'అంతర్గత పరీక్ష',
MAX(ఫలితము వచ్చినప్పుడు కేస్ చేయండి. Mark_type ='మధ్యంతర పరీక్ష'అప్పుడు ఫలితం.మార్కులు ముగిశాయి) 'మధ్యంతర పరీక్ష',
MAX(ఫలితము వచ్చినప్పుడు కేస్ చేయండి. Mark_type ='తుది పరీక్ష'అప్పుడు ఫలితం.మార్కులు ముగిశాయి) 'తుది పరీక్ష',
SUM(ఫలితం.మార్కులు) గామొత్తం
ఫలితం నుండి
ఫలితం ద్వారా గుంపు. Std_id, result.course_id
ఫలితం ద్వారా ఆర్డర్ చేయండి. Std_id, result.course_id ASC;

అవుట్‌పుట్ అనే కొత్త కాలమ్ చూపిస్తుంది మొత్తం అది ప్రతి ప్రత్యేక విద్యార్థి పొందిన ప్రతి కోర్సు యొక్క అన్ని రకాల పరీక్షల మార్కుల మొత్తాన్ని ప్రదర్శిస్తుంది.

బహుళ పట్టికలలో వరుసలను నిలువు వరుసలకు తిప్పండి:

మునుపటి రెండు ప్రశ్నలు దీనికి వర్తింపజేయబడ్డాయి ఫలితం పట్టిక. ఈ పట్టిక ఇతర రెండు పట్టికలకు సంబంధించినది. ఇవి విద్యార్థులు మరియు కోర్సులు . మీరు విద్యార్థి ఐడికి బదులుగా విద్యార్థి పేరును మరియు కోర్సు ఐడికి బదులుగా కోర్సు పేరును ప్రదర్శించాలనుకుంటే, మీరు మూడు సంబంధిత పట్టికలను ఉపయోగించి ఎంపిక ప్రశ్నను వ్రాయాలి, విద్యార్థులు , కోర్సులు మరియు ఫలితం . FORM నిబంధన తర్వాత మూడు పట్టిక పేర్లను జోడించడం ద్వారా మరియు మూడు పట్టికల నుండి డేటాను తిరిగి పొందడానికి మరియు మునుపటి SELECT ప్రశ్నల కంటే మరింత సరైన అవుట్‌పుట్‌ను రూపొందించడానికి ఎక్కడ క్లాజ్‌లో తగిన షరతులను సెట్ చేయడం ద్వారా క్రింది SELECT ప్రశ్న సృష్టించబడుతుంది.

విద్యార్థులను ఎంచుకోండి. పేరుగా 'విద్యార్థి పేరు', కోర్సులు.పేరుగా 'కోర్సు పేరు',
MAX(ఫలితము వచ్చినప్పుడు కేస్ చేయండి. Mark_type ='అంతర్గత పరీక్ష'అప్పుడు ఫలితం.మార్కులు ముగిశాయి) 'CT',
MAX(ఫలితము వచ్చినప్పుడు కేస్ చేయండి. Mark_type ='మధ్యంతర పరీక్ష'అప్పుడు ఫలితం.మార్కులు ముగిశాయి) 'మధ్య',
MAX(ఫలితము వచ్చినప్పుడు కేస్ చేయండి. Mark_type ='తుది పరీక్ష'అప్పుడు ఫలితం.మార్కులు ముగిశాయి) 'చివరి',
SUM(ఫలితం.మార్కులు) గామొత్తం
విద్యార్థుల నుండి, కోర్సులు, ఫలితం
WHERE result.std_id = students.id మరియు result.course_id = courses.course_id
ఫలితం ద్వారా గుంపు. Std_id, result.course_id
ఫలితం ద్వారా ఆర్డర్ చేయండి. Std_id, result.course_id ASC;

పై ప్రశ్నను అమలు చేసిన తర్వాత కింది అవుట్‌పుట్ ఉత్పత్తి అవుతుంది.

ముగింపు:

MySQL లో పివోట్ () ఫంక్షన్ మద్దతు లేకుండా మీరు పివోట్ () ఫంక్షన్ యొక్క కార్యాచరణను ఎలా అమలు చేయవచ్చు ఈ కథనాన్ని చదివిన తర్వాత SELECT ప్రశ్నను ఉపయోగించడం ద్వారా పాఠకులు ఏదైనా వరుస-స్థాయి డేటాను కాలమ్-స్థాయి డేటాగా మార్చగలరని నేను ఆశిస్తున్నాను.