Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Sélectionner les colonnes d'une table en fonction des noms de colonne d'une autre table

Ma réponse précédente était pour mysql. Puisque la balise a été mise à jour sur la question depuis lors, voici la requête pour sql-server-2008 .

Construire une liste de colonnes à partir des valeurs de table_levels , supprimer le dernier , , créez une chaîne de requête pour obtenir les résultats de table_results , puis exécutez.

DECLARE @listStr varchar(MAX) = ( select selectColumnName + ',' from table_levels where level = 1 for xml path(''))
DECLARE @query varchar(MAX) = 'SELECT ' + LEFT(@listStr, LEN(@listStr)-1) + ' FROM table_results'
execute(@query)

Démo pour serveur sql

Réponse précédente. Fonctionne pour mssql

Voir démo pour mysql

Utilisez GROUP_CONCAT pour créer une chaîne à partir des valeurs de table_levels puis créez une chaîne de requête pour obtenir les résultats de table_results

SET @listStr = ( SELECT GROUP_CONCAT(selectColumnName) FROM table_levels where level = 1);
SET @query := CONCAT('SELECT ', @listStr, ' FROM table_results');
PREPARE STMT FROM @query;
EXECUTE STMT;