SQL服务器OPENJSON,其中多个位于字段上

时间:2017-08-19 10:11:34

标签: sql-server json tsql sql-server-2016

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

enter image description here

我想获得只有redblue颜色和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

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

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;

我希望这有点像你想要的。