这是我第一次来这里。一般来说,我发现自己有一些答案,但现在我遇到了PIVOT sql server 2012的一个大问题。我只是一个实习生而且我不知道如何使用PHP在多个表和列中做PIVOTS。 所以我有3个表(Equipements,Champ-perso,Equipement_Complément),我成功地通过使用PHP的SQL查询显示所有数据。但是在这个显示中,有一些重复的设备,并且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
`
答案 0 :(得分:0)
这是您的问题的解决方案。我假设您的问题中显示的数据位于表#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
,只要该值丢失。