Выравнивание таблицы в SQL с динамическим именем столбца

#sql #sql-server #rdbms

#sql #sql-сервер #rdbms

Вопрос:

У меня есть следующая таблица MyTable

 RequestId| Name|Phone|  ContactEmail    |RoleType|  Address     |TypeOfContact

  1   | abc |123  |abc@gmail.com    |null    |  NULL        |Primary
  1   | kbd |133  |kbd@gmail.com    |A       |  Address1    |Local
 

Я могу сгладить вышеупомянутую проблему, используя следующий запрос:

 SELECT a.Name as PrimaryName, a.ContactEmail as PrimaryEmail
,b.Name as LocalName,b.ContactEmail as LocalEmail
,b.Address as LocalAddress, b.RoleType as LocalRoleType
FROM  MyTable a   join   MyTable on a.requestid=b.requestid 
WHERE    a.requestid=1 AND a.TypeOfContact='Primary' and b.TypeofContact='Local'


PrimaryName |PrimaryEmail | LocalName   | LocalEmail    |LocalRoleType  |LocalAddress   

abc         |abc@gmail.com| kbd         |kbd@gmail.com  |A          | Address1     
 

Но проблема возникает, когда у меня один и тот же тип контакта несколько раз, как показано ниже:

  RequestId| Name|Phone| ContactEmail    |RoleType|  Address     |TypeOfContact

  1   | abc |123  |abc@gmail.com    |null    |  NULL        |Primary
  1   | kbd |133  |kbd@gmail.com    |A       |  Address1    |Local
  1   | vgk |999  | vgk@gmail.com   |B       |  Address2    |Local
 

Если я использую следующий запрос, я получу 2 записи

 SELECT a.Name as PrimaryName, a.ContactEmail as PrimaryEmail,b.Name as LocalName,b.ContactEmail as 
LocalEmail1
,b.Address as LocalAddress, b.RoleType as LocalRoleType
FROM  MyTable a   join   MyTableb on a.requestid=b.requestid 
WHERE    a.requestid=1 AND a.TypeofContact='Primary' and b.TypeofContact='Local'

PrimaryName |PrimaryEmail | LocalName   |LocalEmail |LocalRoleType  |LocalAddress   

abc         |abc@gmail.com| kbd         |kbd@gmail.com  |A          | Address1  
abc         |abc@gmail.com| vgk         |vgk@gmail.com  |B          | Address2  
 

Вместо приведенного выше преобразования мне нужны динамические столбцы, чтобы я получал только 1 результирующий набор, такой как LocalName1, LocalName2, LocalEmail1, LocalEmail2, LocalAddress2 и т. Д. Следующим образом:

Требуемый формат данных:

 PrimaryName |PrimaryEmail | LocalName1  |LocalEmail1    |LocalRoleType1 |LocalAddress1  |LocalName2|LocalContactEmail2  |LocalRoleType2 |LocalAddress2

abc         |abc@gmail.com| kbd         |kbd@gmail.com  |A              | Address1      |vgk       |vgk@gmail.com       |        B      | Address2
 

введите описание изображения здесь

Комментарии:

1. Форматирование таблицы проблематично. Пожалуйста, найдите время, чтобы сделать таблицы удобочитаемыми.

2. @nicomp Я добавил скриншот.. Надеюсь, теперь таблицы доступны для чтения

3. @Aathira . , , Вы знаете, какие столбцы вы хотите в таблице результатов? Если вы этого не сделаете, вам нужно использовать динамический SQL.

4. @GordonLinoff Я не знаю имен столбцов, поэтому, как вы сказали, здесь будет применим динамический SQL