按列查询分组并返回 JSON

时间:2021-04-28 10:21:25

标签: sql json sql-server tsql

我有一个表格如下:

<头>
id 手机 优惠券 状态
1 1 0811111111 1 1
2 1 08222222222 2 1
3 1 08222222222 3 1
4 1 08222222222 4 1
5 1 08111111111 5 1
6 2 08333333333 6 1
7 2 08333333333 7 1
8 2 08444444444 8 1
----- ----- --------------- -------- -------

我想在 WHERE 列上使用 mId 子句查询表并过滤 couponno 或列在 handphone 数字上。如何查询?

我想要的结果是:

{
  "08111111111": [{
    "Id": 1,
    "CouponNo": 1,
    "Status": 1
  }, {
    "Id": 5,
    "CouponNo": 5,
    "Status": 1
  }],
  "08222222222": [{
    "Id": 2,
    "CouponNo": 2,
    "Status": 1
  }, {
    "Id": 3,
    "CouponNo": 3,
    "Status": 1
  }, {
    "Id": 4,
    "CouponNo": 4,
    "Status": 1
  }]
}

1 个答案:

答案 0 :(得分:0)

要求 Handphone 作为 JSON 中的对象键会导致难以从 SQL 生成,并且随着时间的推移添加更多数据,接收端也可能无法很好地扩展。

这里是一些基于数据透视的 SQL,可以生成您想要的 JSON...

create table dbo.PivotJsonStuff (
  Id int,
  [Mid] int,
  Handphone varchar(11),
  CouponNo int,
  Status int
);

insert dbo.PivotJsonStuff (Id, [Mid], Handphone, CouponNo, Status)
values
  (1, 1, '08111111111', 1, 1),
  (2, 1, '08222222222', 2, 1),
  (3, 1, '08222222222', 3, 1),
  (4, 1, '08222222222', 4, 1),
  (5, 1, '08111111111', 5, 1),
  (6, 2, '08333333333', 6, 1),
  (7, 2, '08333333333', 7, 1),
  (8, 2, '08444444444', 8, 1);

select
  [08111111111] = json_query([08111111111]),
  [08222222222] = json_query([08222222222])
from (
  select Handphone,
    [JSON] = (
      select PJS2.Id, PJS2.CouponNo, PJS2.Status
      from dbo.PivotJsonStuff PJS2
      where PJS2.Handphone = PJS1.Handphone
      for json path
    )
  from dbo.PivotJsonStuff PJS1
  group by Handphone
) src
pivot (max([JSON]) for Handphone in ([08111111111], [08222222222])) pvt
for json path, without_array_wrapper;
{
    "08111111111": [
        {
            "Id": 1,
            "CouponNo": 1,
            "Status": 1
        },
        {
            "Id": 5,
            "CouponNo": 5,
            "Status": 1
        }
    ],
    "08222222222": [
        {
            "Id": 2,
            "CouponNo": 2,
            "Status": 1
        },
        {
            "Id": 3,
            "CouponNo": 3,
            "Status": 1
        },
        {
            "Id": 4,
            "CouponNo": 4,
            "Status": 1
        }
    ]
}
相关问题