Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wählen Sie Spalten aus einer Tabelle basierend auf den Spaltennamen aus einer anderen Tabelle aus

Meine vorherige Antwort war für mysql. Da das Tag seitdem für die Frage aktualisiert wurde, ist hier die Abfrage für sql-server-2008 .

Erstellen Sie eine Liste von Spalten aus den Werten in table_levels , entfernen Sie den letzten , , erstellen Sie eine Abfragezeichenfolge, um die Ergebnisse von table_results abzurufen , und dann ausführen.

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 für SQL-Server

Vorherige Antwort. Funktioniert für mssql

Siehe Demo für MySQL

Verwenden Sie GROUP_CONCAT um aus den Werten in table_levels einen String zu machen und erstellen Sie dann eine Abfragezeichenfolge, um die Ergebnisse von table_results abzurufen

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;