将 NoSQL 架构中的行转换为 SQL 服务器中的列
Convert rows from a NoSQL schema to columns in SQL Server
我了解如何使用 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
所以,我需要的是按sequence_number分组的一行相关记录。具有相同 sequence_number 的行数是动态的(它会变化)。
有什么想法吗?
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);
Returns
我了解如何使用 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
所以,我需要的是按sequence_number分组的一行相关记录。具有相同 sequence_number 的行数是动态的(它会变化)。
有什么想法吗?
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);
Returns