Sql 需要行号为()的动态轴

Sql 需要行号为()的动态轴,sql,sql-server,pivot,row-number,dynamic-columns,Sql,Sql Server,Pivot,Row Number,Dynamic Columns,我正在使用MicrosoftSQLServerManagementStudio 2008 我有如下数据: Client ID Value ------------------------------- 12345 Did Not Meet 12345 Did Not Meet 12345 Partially Met 12346 Partially Met 12346 Par

我正在使用MicrosoftSQLServerManagementStudio 2008

我有如下数据:

Client ID        Value
-------------------------------
12345            Did Not Meet
12345            Did Not Meet
12345            Partially Met
12346            Partially Met
12346            Partially Met
12346            Partially Met
12347            Partially Met
12347            Partially Met
12347            Did Not Meet
12347            Met
Client ID                Value1                Value2                   Value3                      Value4

12345                    Did Not Meet           Did Not Meet            Partially Met                NULL
12346                    Partially Met          Partially Met           Partially Met                NULL
12347                    Partially Met          Partially Met           Did Not Meet                 Met         
我希望结果如下所示:

Client ID        Value
-------------------------------
12345            Did Not Meet
12345            Did Not Meet
12345            Partially Met
12346            Partially Met
12346            Partially Met
12346            Partially Met
12347            Partially Met
12347            Partially Met
12347            Did Not Meet
12347            Met
Client ID                Value1                Value2                   Value3                      Value4

12345                    Did Not Meet           Did Not Meet            Partially Met                NULL
12346                    Partially Met          Partially Met           Partially Met                NULL
12347                    Partially Met          Partially Met           Did Not Meet                 Met         
这些列是未知的,所以我知道我需要一个动态查询。我尝试了一个带有pivot函数的动态查询,但只得到了同一类型值下的分组。所以聚合函数对我不利

这就是我尝试的问题:

Declare @Columns nvarchar(max); 
Declare @DynamicPivotQuery nvarchar(max);   

Select @Columns=    
COALESCE(@Columns+',','')+QUOTENAME(Value)  
from (select distinct Document.Value
from Document d 
join Client c on d.clientid=c.id    
    )
 as t1  


Set @DynamicPivotQuery= 
 N'Select ClientID, ' + @Columns + '    
 from   
 (select Document.ClientID, 
  DocumentFact.Value,   
   from Document d
   join Client c on d.clientid=c.id 
 ) p    
Pivot (max(Value) for Value in ('+@Columns+'))  
 as pivottable  
 order by ClientID;'
执行官(@DynamicPivotQuery)

接下来,我添加了行数和分区函数,但似乎无法调试它。我得到的错误是:

味精102,第15级,状态1,第29行
“')附近的语法不正确

它靠近XML路径函数

在此方面的任何帮助都将不胜感激。谢谢

select @Columns=    
COALESCE(@Columns+',','')+QUOTENAME(Value)  
from (select distinct Document.Value    
, 'name'+ CAST (row_number() over   
(Partition BY clientid order by clientid) as NVARCHAR (10)) as Cols 
from document d
join Clients c on d.clientid=c.id   

 t1 

 --FOR XML PATH('')),      1, 1, N'');
 FOR XML PATH('')), TYPE).value('.','NVARCHAR(MAX)'),1,2,'')    
  order by ClientID 

使用
cte
,使用
行号
可以获得以下结果:

您的模式:

查询:

结果是:


你不能用php、python、javascript这样的脚本来完成吗?@WixLove请随时提供反馈,抱歉——我正在重写我的评论,因为第一次不清楚。谢谢你的回复。我尝试在SQL上运行您的示例,但Fiddle根本无法运行您的查询。上面的帖子是我问题的简化版。我自定义了更复杂的查询,没有收到错误消息,但查询运行了15分钟。我不知道为什么我不能让您的查询在SQL FIDLE中运行。通过添加一些过滤器,我终于能够使您建议的查询正常运行,从而使运行时间大大加快,从而可以看到结果。这正是我想要的,我非常感谢你!欢迎您,兄弟,只需在
选择
cte
后的部分,您还可以使用4个
自连接
而不是子查询。
Client ID   value1          value2          value3          value4
12345       Did Not Meet    Did Not Meet    Partially Met   (null)
12346       Partially Met   Partially Met   Partially Met   (null)
12347       Did Not Meet    Met Partially   Met Partially    Met