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

MSSQL динамични обобщени стойности на колона към заглавката на колоната

Проблемът с текущата ви заявка е с реда:

MAX(SERVER_ID) 

Искате да покажете PROPERTY_CHAR_VAL за всяко PROPERTY_NAME вместо. SERVER_ID ще бъде част от крайния резултат като колона.

Понякога, когато работите с PIVOT, е по-лесно първо да напишете кода с твърдо кодирани стойности, подобно на:

изберете id, name1, name2, name3, name4from( изберете id, property_name, property_value от вашата таблица) dpivot( max(property_value) за property_name в (name1, name2, name3, name4)) piv; 

Вижте SQL Fiddle с демонстрация .

След като имате версия, която има правилната логика, тогава можете да я конвертирате в динамичен SQL, за да получите резултата. Това ще създаде sql низ, който ще бъде изпълнен и ще включва всички ваши нови имена на колони.

DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)select @cols =STUFF((SELECT distinct ',' + QUOTENAME(PROPERTY_NAME) from yourtable FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')set @query ='SELECT id, ' + @cols + ' from ( select id, property_name, property_value from yourtable ) x pivot ( max(property_value) for property_name in (' + @cols + ') ) p 'execute sp_executesql @query; 

Вижте SQL Fiddle с демонстрация . И двете ще дадат резултат:

<предварителен код>| ID | ИМЕ1 | ИМЕ2 | ИМЕ3 | ИМЕ4 | ИМЕ6 ||----|--------|--------|--------|--------|------ --|| 1 | стойност | стойност | стойност | (нула) | (нула) || 2 | (нула) | стойност | (нула) | стойност | (нула) || 3 | (нула) | (нула) | (нула) | (нула) | стойност |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо CTE (Common Table Expressions) в някои случаи забавя заявките в сравнение с временните таблици в SQL Server

  2. Как да възстановя индекса в колони на определена таблица?

  3. Защо ISNUMERIC(',') е вярно?

  4. Как да създадете централна заявка в sql сървър без агрегатна функция

  5. кръстосаното прилагане на xml заявката работи експоненциално по-зле с нарастването на xml документа