Sql renvoie plusieurs lignes pour les loggings avec plusieurs indicateurs définis

Chers développeurs intelligents là-bas,

donné l'set de données suivant:

Name Football Tennis Snowboarding -------------------------------------- Jane true false false Jack true true false Sue false true true 

Je voudrais get la sortie suivante d'une requête SQL:

 Name Sport ------------- Jane Football Jack Football Jack Tennis Sue Tennis Sue Snowboarding 

Une idée de comment cela peut-il être fait? (J'ai besoin de cela pour faciliter la création d'un rapport SQL)

Merci d'avance, AllWorkNoPlay

Vous pouvez le faire de différentes façons. Voici une méthode avec cross apply :

 select v.name, v.sport from table t cross apply (values (t.name, 'football', t.football), (t.name, 'tennis', t.tennis), (t.name, 'Snowboarding', t.Snowboarding) ) v(name, sport, flg) where flg = 'true'; 

Cela est généralement fait en utilisant UNIONs:

 select Name, 'Football' as Sport from tab where Football = 'true' UNION ALL select Name, 'Tennis' as Sport from tab where Tennis = 'true' UNION ALL select Name, 'Snowboarding' as Sport from tab where Snowboarding = 'true' 

Bien sûr, dans un model de données normalisé, ce serait beaucoup plus facile 🙂