sql >> Databasteknik >  >> RDS >> Sqlserver

Välj kolumner från en tabell baserat på kolumnnamnen från en annan tabell

Mitt tidigare svar var för mysql. Eftersom taggen har uppdaterats på frågan sedan dess, här är frågan för sql-server-2008 .

Bygg en lista med kolumner från värdena i table_levels , ta bort den sista , , bygg en frågesträng för att få dig resultaten från table_results , och kör sedan.

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

Tidigare svar. Fungerar för mssql

Se demo för mysql

Använd GROUP_CONCAT för att göra en sträng av värdena i table_levels och bygg sedan en frågesträng för att få dig resultaten från 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;


  1. Undersöker ett ORA 028513 DG4ODBC-fel

  2. PDO-MySQL:Booleska värden konverteras till 1 eller tom sträng vid förberedd satsbindning

  3. Fluent Nhibernate Oracle Identifier Too Long - Alias ​​Name Issue

  4. Grekiska teckenkodning fungerar i HTML men inte i PHP