Supposons que vous ayez la table de base suivante:
student_id student_name english arabic chinese
------------------------------------------------------
001 vishnu YES NO YES
J'en ai besoin au format suivant:
student_id student_name course_name subscribed
--------------------------------------------------
001 vishnu english YES
001 vishnu arabic NO
001 vishnu chinese YES
J'ai besoin de la requête mysql pour ce. Aidez-moi ou guidez-moi dans la bonne direction.
4 Réponses :
Vous devez utiliser le cas avec group by.
select student_id, student_name, max(case when course_name='english' then subscribed else 'A' end) as english, max(case when course_name='arabic' then subscribed else 'A' end) as arabic, max(case when course_name='chinese' then subscribed else 'A' end) as chinese from table group by student_id, student_name;
Vous pouvez essayer d'utiliser l'agrégation conditionnelle
select student_id, student_name,
max(case when course_name='english' then subscribed end) as english,
max(case when course_name='arabic' then subscribed end) as arabic,
max(case when course_name='chinese' then subscribed end) as chinese
from tablename group by student_id, student_name
Je ferais pivoter cela: (Solution SQL Server)
create table #temp (studentId int, studentName nvarchar(75), course_name nvarchar(75),subscribed nvarchar(3))
insert into #temp values (1,'James','English','Yes')
insert into #temp values (2,'Victor','Arabic','No')
insert into #temp values (2,'Victor','Chinese','Yes')
insert into #temp values (2,'William','Chinese','Yes')
select * from (select * from #temp) t1 pivot(max(subscribed) for course_name in ([English],[Arabic],[Chinese]))t1
studentId studentName English Arabic Chinese
1 James Yes NULL NULL
2 Victor NULL No Yes
2 William NULL NULL Yes
J'obtiens cette erreur ?? 10:46:47 select * from (select * from student_temp) t1 pivot (max (subscribed) for course_name in ([English], [Arabic], [Chinese])) t1 Error Code: 1064. Vous avez un erreur dans votre syntaxe SQL; vérifiez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de 'pivot (max (abonné) pour course_name en ([anglais], [arabe], [chinois])) t1' à la ligne 1 0,051 sec code>. @Jorge Lopez
il semble que ma solution soit destinée au serveur SQL, pas à mySQL. Désolé pour ça, Vishnu. Je viens de réaliser la portée de votre question.
Je supprimerais le commentaire, mais les résultats mySQL apparaissent lors de la recherche d'un serveur SQL. Donc, cela pourrait être utile pour d'autres utilisateurs.
Cela devrait être comme ça, cette demande ne fonctionne que s'il n'y a pas de données en double, comme un cours d'anglais en double pour un seul étudiant.
SELECT
std.student_id,
std.student_name,
(SELECT
(CASE WHEN t1.cours_name = 'english' THEN "YES" ELSE "NO" END)
FROM table as t1
WHERE
t1.student_id = std.student_id
AND
t1.cours_name = 'english') AS english,
(SELECT
(CASE WHEN t1.cours_name = 'arabic' THEN "YES" ELSE "NO" END)
FROM table as t1
WHERE
t1.student_id = std.student_id
AND
t1.cours_name = 'arabic') AS arabic,
(SELECT
(CASE WHEN t1.cours_name = 'chinese' THEN "YES" ELSE "NO" END)
FROM table as t1
WHERE
t1.student_id = std.student_id
AND
t1.cours_name = 'chinese') AS chinese
FROM
table as std
GROUP BY std.student_id;
Envisagez de gérer les problèmes d'affichage des données dans le code de l'application