mysql a spécifié la colonne dans la ligne

Étant donné que le projet doit utiliser le contenu répertorié comme nom de champ

Synthétiser une donnée avec différents noms de la même entreprise (une donnée pour chaque état) et utiliser l'heure correspondante de l'état comme nom de champ


 select B.seId,B.company, B.short,  
 max(if(A.stat=101, A.statDate,NULL )) as qStatDate,
 max(if (A.stat=102,A.statDate,NULL )) as wStatDate,
 max(if(A.stat=103, A.statDate,NULL )) as zStatDate,
 max(if(A.stat=201, A.statDate,NULL )) as yStatDate,
 max(if(A.stat=201, A.ref,NULL )) as yRef,
 max(if(A.stat=202, A.statDate,NULL )) as yStatDate,
 max(if(A.stat=202, A.ref,NULL )) as yRef,
 max(if(A.stat=203, A.statDate,NULL )) as yStatDate,
 max(if(A.stat=204, A.statDate,NULL )) as yStatDate,
 max(if(A.stat=204, A.ref,NULL )) as yRef,
 max(if(A.stat=205, A.statDate,NULL )) as gStatDate,
 max(if(A.stat=205, A.ref, NULL )) as gRef,
 max(if(A.stat=206, A.statDate,NULL )) as zStatDate,
 max(if(A.stat in (207,208), A.statDate,NULL )) as zhStatDate,
 max(if(A.stat=209, A.statDate,NULL )) as fStatDate,
 max(if(A.stat=210, A.statDate,NULL )) as fsStatDate,
 max(if(A.stat=211, A.statDate,NULL )) as zhbStatDate,
 max(if(A.stat=212, A.statDate,NULL )) as ssStatDate,
 max(if(A.stat=212, A.ref,NULL )) as ssRef,
 max(if(A.stat=213, A.statDate,NULL )) as sswStatDate,
 max(if(A.stat=213, A.ref,NULL )) as sswRef,
 max(if(A.stat=214, A.statDate,NULL )) as zhsStatDate,
 max(if(A.stat=214, A.ref,NULL )) as zhsRef,
 max(if(A.stat=215, A.statDate,NULL )) as fsStatDate,
 max(if(A.stat=216, A.statDate,NULL )) as fswStatDate
from (SELECT seId, stat, statDate, ref FROM dws_detail where dataStatus<>3) as A LEFT JOIN (SELECT seId,company, short FROM dws_base where dataStatus<>3) AS B ON A.seId=B.seId  GROUP BY A.seId

il y a un endroit pour faire attention

Il peut être utilisé en vérifiant les données

"""case ZZZ when XXX then YYY else AAA end""" Utilisez case when pour obtenir la valeur si A.stat correspond à A.statDate est une correspondance un à un, puis utilisez cette méthode pour vous assurer que la valeur être obtenu, mais il n'y aura pas de correspondance un à un, c'est-à-dire que si A.stat = 101 correspond à A.statDate est 2020-01-01, alors une erreur correspondante se produira.

101 correspond au champ qdStatDate ; 103 correspond au champ zzssStatDate, donc le cas où la méthode est utilisée pour changer de colonne, et l'effet n'est pas évident lorsqu'il y a beaucoup de colonnes et que différents contenus seront mappés

""" if (XXX, YYY, ZZZZ)"""" L'utilisation de cette méthode pour obtenir des valeurs peut résoudre les problèmes mentionnés ci-dessus

"""max(if(XXX, YYY, ZZZZ))"" L'utilisation de cette méthode peut résoudre le problème de la sélection de la valeur maximale lorsque plusieurs valeurs sont prises

Problèmes personnels rencontrés dans le projet, à titre indicatif

Guess you like

Origin blog.csdn.net/weixin_43124425/article/details/112980254