我有一个带json
字段的表格。 json
架构对于所有记录都是相同的。
我想获得只有red
或blue
颜色和brand 1
的2种产品。
我尝试了下面的查询,但我知道它不起作用:
SELECT [Id], [JName], [JValue]
FROM [Product]
CROSS APPLY OPENJSON([Json])
WITH ([JName] NVARCHAR(50) '$.name', [JValue] NVARCHAR(50) '$.value')
WHERE
(CASE WHEN [JName]=N'color' AND [JValue] IN (N'red', N'red') THEN 1 ELSE 0 END) &
(CASE WHEN [JName]=N'brand' AND [JValue] IN (N'brand 1') THEN 1 ELSE 0 END) = 1
那么,我应该怎么写这个查询?
答案 0 :(得分:1)
我不确定你在问什么:
如何获取符合条件的数据(红色或蓝色和品牌1),因为您发布的查询无法获得所需内容。
OR
如何为分页目的进行OFFSET。
OR
两个
无论如何,在我上面的初步评论之后(但在回复之前),我写了一个查询,它会给你你想要的东西(红色或蓝色和Brand1)。
在您回复后,我修改了查询以执行OFFSET
:
;WITH prod
AS
(
SELECT [Id], [JName], [JValue]
FROM dbo.tb_Product
CROSS APPLY OPENJSON([Json])
WITH ([JName] NVARCHAR(50) '$.name', [JValue] NVARCHAR(50) '$.value')
)
SELECT p1.Id, p1.JValue AS Color, p2.JValue AS Brand
FROM prod p1
JOIN prod p2
ON p1.Id = p2.Id
WHERE p1.JName = 'Color'
AND p1.JValue IN ('red', 'blue')
AND p2.JName = 'Brand'
AND p2.JValue IN ('Brand1')
ORDER BY p1.ID
OFFSET 0 ROWS
FETCH NEXT 2 ROWS ONLY;
我希望这有点像你想要的。