2011-01-21 4 views
1

J'ai une table des sommes dues, ainsi que d'un identifiant d'équipe (peut être 1,2,3 par exemple)en utilisant la somme et le groupe par et IFNULL

je une autre table qui donne un nom à ces identifiants d'équipe (donc 1 pourrait faire référence à jokers de John etc)

La première table peut avoir plusieurs entrées pour l'argent dû et je dois obtenir le total dû par identifiant d'équipe, et utiliser le nom de l'équipe si elle existe .

Je suis donc parti rejoindre les tables et utiliser une clause somme et obtenir un montant total dû par nom d'équipe, ou null si le nom d'équipe n'est pas présent. Si elle est nulle alors je veux utiliser l'identifiant de l'équipe, de sorte que les résultats ressembleraient

name   total 
..................... 
team1   100 
John's jokers 1000 
99    50 

où 99 est un identifiant d'équipe parce qu'il n'y avait pas teamname et il y avait un cadeau nul.

J'ai essayé d'utiliser ifnull (columnName, teamID) mais cela a échoué lors de l'utilisation d'une clause sum.

Quelqu'un pourrait-il aider à ce problème s'il vous plaît

Répondre

3

Je pense IFNULL() est utilisé comme ceci:

select ifnull(teams.team_name, teams.team_id) from teams; 

Donc, dans ce cas, il essaie de récupérer le nom de l'équipe, et si cela vient back null utilise à la place l'identifiant de l'équipe. Dans ce cas, votre requête ressemblerait à ceci:

select ifnull(teams.team_name, owing.team_id), sum(amount_owed) 
    from owing left join teams on owing.team_id = teams.id 
group by owing.team_id 

Assurez-vous que le groupe en demande pour le champ d'identification de raison, pas d'équipes, sinon vous serez Regrouper sur un champ nul.

Est-ce que cela résout le problème?

+0

Génial !! Cela a fixé un régal! Je pense que je regroupais sur les équipes id. Merci beaucoup pour votre aide. – Dave

Questions connexes