Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Seleziona le colonne di una tabella in base ai nomi delle colonne di un'altra tabella

La mia risposta precedente era per MySQL. Poiché da allora il tag è stato aggiornato sulla domanda, ecco la query per sql-server-2008 .

Crea un elenco di colonne dai valori in table_levels , rimuovi l'ultimo , , crea una stringa di query per ottenere i risultati da table_results , quindi eseguire.

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)

Demo per sql server

Risposta precedente. Funziona per mssql

Vedi la demo per mysql

Usa GROUP_CONCAT per creare una stringa dai valori in table_levels e quindi crea una stringa di query per ottenere i risultati da 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;