Sql server 将NoSQL架构中的行转换为SQL Server中的列
我了解如何使用PIVOT将行旋转为列,但我有一个独特的场景,其中行也必须分组。源数据来自NoSQL数据库模式(非关系型)。以下是源数据的示例: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
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我还没有看到表变量或有序子查询的问题