0
votes

Impossible de regrouper correctement les données

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>

sql

2 commentaires

Quel SQL utilisez-vous exactement et pourquoi avez-vous besoin d'un regroupement ici par emp_type, emp_add ?


est-ce MySQL ?


3 Réponses :


0
votes

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


4 commentaires

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



0
votes

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


1 commentaires

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?



0
votes

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


1 commentaires

Qu'est-ce que cela fait? Pourquoi ça marche? Veuillez éditer votre réponse et expliquer, merci.