sql >> Databáze >  >> RDS >> Sqlserver

Vyberte sloupce z jedné tabulky na základě názvů sloupců z jiné tabulky

Moje předchozí odpověď byla pro mysql. Protože byla značka od té doby u otázky aktualizována, zde je dotaz pro sql-server-2008 .

Sestavte seznam sloupců z hodnot v table_levels , odstraňte poslední , , vytvořte řetězec dotazu, abyste získali výsledky z table_results a poté provést.

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)

Ukázka pro sql server

Předchozí odpověď. Funguje pro mssql

Viz ukázka pro mysql

Použijte GROUP_CONCAT vytvořit řetězec z hodnot v table_levels a poté vytvořte řetězec dotazu, abyste získali výsledky z 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. Správná správa databázových zdrojů:kurzor a připojení

  2. Jak implementovat obousměrný jedinečný index ve více sloupcích

  3. Použití COALESCE ke zpracování hodnot NULL v PostgreSQL

  4. SQL dotaz; horizontální až vertikální