Sql server 将NoSQL架构中的行转换为SQL Server中的列

Sql server 将NoSQL架构中的行转换为SQL Server中的列,sql-server,pivot,nosql,Sql Server,Pivot,Nosql,我了解如何使用PIVOT将行旋转为列,但我有一个独特的场景,其中行也必须分组。源数据来自NoSQL数据库模式(非关系型)。以下是源数据的示例: ID case_id field_id sequence_number textvalue 1 12897 25 100 AAAAA 2 12897 50 100 BBBBB 3 12897 75 100 CCCCC

我了解如何使用PIVOT将行旋转为列,但我有一个独特的场景,其中行也必须分组。源数据来自NoSQL数据库模式(非关系型)。以下是源数据的示例:

ID case_id field_id sequence_number textvalue
1  12897     25            100        AAAAA
2  12897     50            100        BBBBB
3  12897     75            100        CCCCC
4  13587     25            200        DDDDD
5  13587     50            200        EEEEE
6  13587     75            200        FFFFF
7  13587    100            200        GGGGG
我需要的结果是:

case_id  value_field_id_25  value_field_id_50  value_field_id_75  value_field_id_100
12897         AAAAA               BBBBB              CCCCC
13587         DDDDD               EEEEE              FFFFF              GGGGG
所以,我需要的是一行相关的记录,按序列号分组。具有相同序列号的行数是动态的(它会变化)

有什么想法吗

Declare @SQL varchar(max) = Stuff((Select ',' + QuoteName('value_field_id_'+cast(field_id as varchar(25))) 
                                    From (Select Distinct Top 100 Percent field_id 
                                           From YourTable 
                                           Order by 1) A 
                                     For XML Path('')),1,1,'') 
Select  @SQL = '
Select [case_id],' + @SQL + '
From (
        Select sequence_number  
              ,case_id
              ,ColName = ''value_field_id_''+cast(field_id as varchar(25))
              ,Value   = textvalue
         From YourTable A
     ) A
 Pivot (max([Value]) For [ColName] in (' + @SQL + ') ) p'
Exec(@SQL);
返回


列的数量总是最多4列吗?不。它会有所不同。然后看看John的动态轴心。这就是你想要的。为什么是100%的顶尖选手?按顺序排序并不是一个好习惯。您应该将该order by移动到外部查询以确保行顺序。但仍然值得获得+1:D@SeanLange为了保持正确的顺序,否则100将成为第一列,但order by位于子查询上,这意味着您仍然无法确保外部查询结果的顺序。它很可能在这个小集合上工作,但顺序可能不总是相同的。@SeanRange现在,如果我在顶部查询中有一个distinct or where,则顺序不会是gtd。@SeanRange我还没有看到表变量或有序子查询的问题