SQL 服务器 OPENJSON 在一个文件中有多个位置

SQL server OPENJSON with multiple where on a filed

我有一个带有 json 字段的 table。 json 架构对于所有记录都是相同的。

我只想购买 2 件颜色为 redblue 且颜色为 brand 1 的产品。
我尝试了以下查询,但我知道它不起作用:

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

那么,这个查询应该怎么写呢?

我有点不确定你在问什么:

如何获取符合您的条件(红色或蓝色和品牌 1)的数据,因为您发布的查询不会得到您想要的。

如何为分页目的执行 OFFSET。

两者都有。

无论如何,在我上面的初始评论之后(但在您回复之前),我写了一个查询,它会为您提供您想要的(红色或蓝色和 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;

希望这是您想要的。