有什么方法可以仅以通用方式更新所选值的表?

时间:2020-04-19 12:25:44

标签: sql json sql-server

我正在创建一个通用解决方案,该解决方案使我可以基于数据库中的数据来构建JSON文件。为了生成JSON,我正在使用SQL Server功能。我的数据库存储基于键值以及一些其他列(例如ID和JSON数据的版本),因此我的主表如下所示:

enter image description here

要从上方的表格构建JSON,我正在使用数据透视表转换表格,因此我的结果如下所示,并且从该位置很容易转换为JSON。

SELECT * into #temptable1
FROM
(SELECT [Key], value FROM MyTable Where ID=1 AND Version=1) as source
PIVOT
(
 MIN(value)
 FOR [Key] IN ([name], [title], [isFinanced])
) as pvt 

SELECT * FROM #temptable1

enter image description here

现在是我遇到问题的地方,在我的主表中,我有不同版本的JSON值,如果要针对两个不同版本的Json值进行数据透视,我想用它们来构建不同的JSON文件。我得到了这个结果:

enter image description here

有什么方法可以将丢失的值仅从第一个表移动到第二个表?所以我的结果就像(保留版本2中的值,并用版本1更新其余值):

enter image description here

这里的问题是值的版本可以不同(因此值可以更改),这意味着我不能直接分配值。

我已经尝试使用UNION,但是它给了我两行,就我而言,应该像合并或更新一样。有什么方法可以用SQL做到吗?

1 个答案:

答案 0 :(得分:1)

如果我理解您的问题,则可以将WITH TIESrow_number()配合使用

SELECT * 
 Into  #temptable1
 FROM  (SELECT Top 1 with ties
               [Key]
              ,value 
         FROM  MyTable 
         Where ID=1
         Order By Row_Number() over (Partition By [ID],[Key] Order By [Version] Desc)
       ) as source
PIVOT
(
 MIN(value)
 FOR [Key] IN ([name], [title], [isFinanced])
) as pvt 

SELECT * FROM #temptable1