Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL:Динамичен изглед с имена на колони въз основа на стойностите на колоните в таблицата източник

Можете да извършите това с PIVOT . Когато правите PIVOT, можете да го направите по един от двата начина, със Static Pivot, който ще кодирате редовете за трансформиране, или Dynamic Pivot, който ще създаде списък с колони по време на изпълнение:

Static Pivot (вижте SQL Fiddle за демонстрация ):

select id, [user], [engineer], [manu], [OS]
from 
(
    select t.id
        , t.[user]
        , p.ticketid
        , p.label
        , p.value
    from tickets t
    inner join properties p
        on t.id = p.ticketid
) x
pivot
(
    min(value)
    for label in ([engineer], [manu], [OS])
) p

Или можете да използвате Dynamic Pivot (Вижте SQL Fiddle за демонстрация ):

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(p.label) 
                    from tickets t
                    inner join properties p
                        on t.id = p.ticketid
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT id, [user], ' + @cols + ' from 
             (
                 select t.id
                        , t.[user]
                        , p.ticketid
                        , p.label
                        , p.value
                    from tickets t
                    inner join properties p
                        on t.id = p.ticketid
            ) x
            pivot 
            (
                min(value)
                for label in (' + @cols + ')
            ) p '

execute(@query)

И двете заявки ще върнат едни и същи резултати.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи функцията QUOTENAME() в SQL Server (T-SQL)

  2. Възможни начини за коригиране на проблема с повреда на метаданните на SQL Server

  3. SQL Server - Връщане на стойност след INSERT

  4. Случай в изявление за избор

  5. Има ли начин да не се използват квадратни скоби в SQL Server?