sql >> Databasteknik >  >> RDS >> Mysql

Ange kolumnvärden som kolumnnamn i SQL-frågeresultatet

Detta görs med en pivottabell . Gruppering efter id , utfärdar du CASE satser för varje värde du vill fånga i en kolumn och använd något som en MAX() aggregera för att eliminera nollorna och kollapsa ner till en rad.

SELECT
  id,
  /* if col1 matches the name string of this CASE, return col2, otherwise return NULL */
  /* Then, the outer MAX() aggregate will eliminate all NULLs and collapse it down to one row per id */
  MAX(CASE WHEN (col1 = 'name') THEN col2 ELSE NULL END) AS name,
  MAX(CASE WHEN (col1 = 'name2') THEN col2 ELSE NULL END) AS name2,
  MAX(CASE WHEN (col1 = 'name3') THEN col2 ELSE NULL END) AS name3
FROM
  yourtable
GROUP BY id
ORDER BY id

Här är ett fungerande exempel

Obs:Detta fungerar bara som det är för ett ändligt och känt antal möjliga värden för col1 . Om antalet möjliga värden är okänt måste du bygga SQL-satsen dynamiskt i en loop.



  1. Hur man inaktiverar alla CHECK &främmande nyckelbegränsningar i en databas i SQL Server (T-SQL-exempel)

  2. JDBC ResultSet får kolumner med tabellalias

  3. Hur man ansluter en databas med en Amazon VPC

  4. Varför fungerar inte min t-sql left join?