я впервые приехал сюда. В общем, я нашел себе несколько ответов, но теперь у меня возникла большая проблема с PIVOT sql server 2012. Я всего лишь стажер, и я не знаю, как делать PIVOTS с несколькими таблицами и столбцами при использовании PHP.
Итак, у меня есть 3 таблицы (Equipements, Champ-perso, Equipement_Complément), мне удалось отобразить все данные с помощью SQL-запроса с использованием PHP. Но на этом экране есть дубликаты оборудования, а Champ-Perso и Equipement_Complément отображаются в строках.
И я хочу сделать функцию PIVOT, которая удаляет дубликаты оборудований и отображает Champ-Perso и Equipement_Complément в столбцах.
Вот мой дисплей
`Name_Equipement Champ-Perso Equipemennt-Complément
ENG-0001 Année rénovation A
ENG-0001 Largeur utile (mm) B
ENG-0001 Nb de pinces de dépose C
ENG-0001 Nb de postes dengagement D
ENG-0001 Nb de voies E
ENG-0001 Numéro du train F
ENG-0001 Type/modèle G
ENG-0002 Année rénovation A1
ENG-0002 Largeur utile (mm) B1
ENG-0002 Nb de pinces de dépose C1
ENG-0002 Nb de postes dengagement D1
ENG-0002 Nb de voies E1
ENG-0002 Numéro du train F1
ENG-0002 Type/modèle G1
`
И я хочу показать
`Name_Equipment Année rénovation Largeur Utile (mm) ... Type:Modèle
ENG-0001 A B ... G
ENG-0002 A1 B1 ... G1
`
Здесь решение вашей проблемы. Я предполагаю, что данные, указанные в вашем вопросе, находятся в таблице #temp
,
Сначала нужно найти уникальный Champ-Perso
с вашего стола. Используйте запрос ниже.
select * into #temp1 from (select distinct([Champ-Perso]) from #temp) as A
Теперь напишите ваш основной запрос, как показано ниже …
Declare @str nvarchar(1000)
Declare @SQL nvarchar(1000)
SELECT @str = COALESCE(@str+'],[', '') + [Champ-Perso] FROM #temp1
set @str = '[' +@str + ']'
set @SQL = N' select [Name_Equipement], ' + @str +' from (select [Name_Equipement], [Champ-Perso], [Equipemennt-Complément] from #temp) as tbl
Pivot
(
max([Equipemennt-Complément])
for [Champ-Perso] in ('+ @str+')
) as p'
Чтобы получить результат, запустите этот запрос …
EXECUTE sp_executesql @sql
Замечания: поскольку Champ-Perso
не часто встречается в вашем Name_Equipement
так что вы увидите NULL
везде, где значение будет отсутствовать.
Других решений пока нет …