sql >> Database >  >> RDS >> Sqlserver

Selecteer kolommen uit de ene tabel op basis van de kolomnamen uit een andere tabel

Mijn vorige antwoord was voor mysql. Aangezien de tag sindsdien is bijgewerkt voor de vraag, is hier de zoekopdracht voor sql-server-2008 .

Maak een lijst met kolommen van de waarden in table_levels , verwijder de laatste , , bouw een queryreeks om u de resultaten te geven van table_results , en voer dan uit.

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 voor sql-server

Vorig antwoord. Werkt voor mssql

Zie demo voor mysql

Gebruik GROUP_CONCAT om een ​​string te maken van de waarden in table_levels en bouw vervolgens een queryreeks om u de resultaten te geven van 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. Oracle [Procedure] - Somfunctie negeert WHERE-clausule

  2. Oracle krijgt rijen die exact overeenkomen met de lijst met waarden

  3. mysqlimport - CSV-bestand importeren in MS Windows XAMPP-omgeving

  4. mysql cross join, maar zonder gedupliceerd paar?