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 🙂