Le problème équivaut à trouver une correspondance maximale dans un graphe bipartite . Chaque élément de colonne représente un sommet, chaque ligne représente une arête. L'article lié de Wikipedia fournit des pointeurs vers des algorithmes pour résoudre ce problème. Il existe une implémentation de l'algorithme hongrois dans la bibliothèque or-tools de Google .
Voici l'exemple donné formulé sous forme de graphique, avec les bords rouges représentant la solution donnée :
Je serais surpris si vous pouviez trouver une solution uniquement en SQL.