Php Pivot sql server多个表和列

Php Pivot sql server多个表和列,php,excel,sql-server-2012,pivot-table,Php,Excel,Sql Server 2012,Pivot Table,这是我第一次来这里。一般来说,我会找到一些答案,但现在我发现PIVOT sql server 2012存在一个大问题。我只是一名实习生,不知道如何使用PHP对多个表和列进行数据透视。 所以我有3个表Equipments,Champ perso,Equipment_Complément,我成功地通过使用PHP的SQL查询显示了所有数据。但在这个显示中,有重复的设备,Champ Perso和Equipment_émension成排显示。 我想做一个函数透视,删除重复的设备,并在列中显示Champ P

这是我第一次来这里。一般来说,我会找到一些答案,但现在我发现PIVOT sql server 2012存在一个大问题。我只是一名实习生,不知道如何使用PHP对多个表和列进行数据透视。 所以我有3个表Equipments,Champ perso,Equipment_Complément,我成功地通过使用PHP的SQL查询显示了所有数据。但在这个显示中,有重复的设备,Champ Perso和Equipment_émension成排显示。 我想做一个函数透视,删除重复的设备,并在列中显示Champ Perso和Equipment_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
现在按如下所示编写pivot查询

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_设备中并不常见,因此您将看到空值,该值将丢失

如果Champ_perso有n个变量值,则必须使用动态sql,例如。如果您知道champ Perso始终是相同的数字7,那么您可以使用正常的枢轴来执行此操作。您只需将camp perso值硬编码到pivot中。除此之外,我们还需要查看SQL表结构。所需的结果会有所帮助,但如果没有SQL或表结构则不够。表结构是必需的。但是,选择DISTINCT是否足够?请告诉我我的查询是否正确,因为在SQL server中,我遇到了一个类似无法添加表“select”的错误:select Equipments.eq_Equipment、[eq_COMPLEMENTS.EQC_VALEUR_a]、[CHAMPS_PERSOS.CHP_DESIGNATION]从我的sql查询中,作为[Année rénovation]、[Largeur utile mm]、[Nb de pinces deépose]、[Nb de postes dengagement]、[Nb de voies]、[Numéro de train]、[Type/mod le]中CHAMPS_PERSOS.CHP_指定为Pv1的src PIVOT