我正在创建一个通用解决方案,该解决方案使我可以基于数据库中的数据来构建JSON文件。为了生成JSON,我正在使用SQL Server功能。我的数据库存储基于键值以及一些其他列(例如ID和JSON数据的版本),因此我的主表如下所示:
要从上方的表格构建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
现在是我遇到问题的地方,在我的主表中,我有不同版本的JSON值,如果要针对两个不同版本的Json值进行数据透视,我想用它们来构建不同的JSON文件。我得到了这个结果:
有什么方法可以将丢失的值仅从第一个表移动到第二个表?所以我的结果就像(保留版本2中的值,并用版本1更新其余值):
这里的问题是值的版本可以不同(因此值可以更改),这意味着我不能直接分配值。
我已经尝试使用UNION,但是它给了我两行,就我而言,应该像合并或更新一样。有什么方法可以用SQL做到吗?
答案 0 :(得分:1)
如果我理解您的问题,则可以将WITH TIES
与row_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