J'ai le tableau suivant
super_id emp_id team_id emp_add emp_type null 146 1000 lon man null 153 1000 del int null 124 1000 kar lead
Je souhaite regrouper le tableau de cette manière:
select case when emp_type = 'sup' then emp_id else null as Super_id,
case when emp_type <> 'sup' then emp_id,
teamid, emp_add, emp_type
from table
group by team_id, emp_type, emp_add;
J'ai écrit le code suivant :
Super_id EMP_ID Team_id emp_add emp_type 112 146 1000 lon man 112 153 1000 del int 112 124 1000 kar lead
J'obtiens le résultat suivant:
emp id Teamid emp_add emp_type 112 1000 mum Sup 153 1000 del int 146 1000 lon man 124 1000 kar lead
Quelqu'un peut-il suggérer le bon code
p>
3 Réponses :
vous avez un problème de cas, 'sup' doit être 'Sup'
aussi
select (select max(emp_id) from table where emp_type = 'Sup') super_id,
emp_id,
teamid, emp_add, emp_type
from table
where emp_type != 'Sup';
Mais ce que vous essayez de réaliser ne semble pas logique
sup vs Sup n'est nécessaire que dans une base de données ou un système sensible à la casse. Si ce classement n'est pas défini, les majuscules et les minuscules n'ont pas d'importance.
bien qu'il soit correct, ce scénario est valable pour ce cas.
@ DervişKayımbaşıoğlu veuillez expliquer pourquoi? Nous n'avons aucune idée si les colonnes décrites sont sensibles à la casse ou non. Par défaut, les colonnes MySQL VARCHAR, par exemple, ne sont pas sensibles à la casse.
Merci les gars. Faire une auto-participation m'a aidé à trouver la bonne solution
Vous pouvez faire une auto-inscription:
SELECT
sup.empid AS super_id,
emp.empid,
emp.teamid,
emp.emp_add,
emp.emp_type
FROM your_table emp
LEFT JOIN (
SELECT *
FROM your_table sup
WHERE emp_type = 'Sup'
) sup
ON emp.teamid = sup.teamid
WHERE emp.empid <> sup.empid
Pensez à développer votre réponse. Pourquoi OP ne fonctionne-t-il pas? Que fait votre solution pour résoudre ou contourner ce problème?
Vous pouvez utiliser le code suivant:
select a.Super_id,b.emp_id,b.teamid,b.emp_add,b.emp_type FROM (SELECT MIN(emp_id) as Super_id FROM table) a, (SELECT emp_id,teamid, emp_add, emp_type FROM table WHERE emp_id NOT IN(SELECT MIN(emp_id) emp_id FROM table)) b
Qu'est-ce que cela fait? Pourquoi ça marche? Veuillez éditer votre réponse et expliquer, merci.
Quel SQL utilisez-vous exactement et pourquoi avez-vous besoin d'un regroupement ici par
emp_type, emp_add?est-ce MySQL ?