【发布时间】:2016-12-10 01:00:00
【问题描述】:
您好,我是 JSON 新手,想问这个问题:
所以我的目标是让结果看起来像这样:
{
"userid": "10293304" , "segments": ["Online_Flag"]
}
{
"userid": "10292298" , "segments": ["schedule_Appointment", "Enrolled_Order","Complete_Order"]
}
我能够使用 T SQL 查询结果如下所示:
[{"userid":"10293159","segments":[{"segment":"Schedule_Appointment"}]},
{"userid":"10293056","segments":[{"segment":"Schedule_Appointment"}]},
{"userid":"10292838","segments":[{"segment":"Schedule_Appointment"}]},
问题是我只需要显示 JSON 值(Schedule_Appointment),而不是键(段)
有没有办法(使用 TSQL)隐藏键并只显示 JSON 数组中的值?
我试图寻找使用 SQL 创建 JSON 数组的方法,但没有运气,如果有人能解释我将不胜感激。
SQL 服务器 2016
数据
CREATE TABLE [dbo].[Lotame_JSON](
[lead_id] [varchar](100) NULL,
[dist_date_key] [date] NULL,
[online_flag] [int] NULL,
[sched_appt_qty] [int] NULL,
[enroll_order_qty] [int] NULL,
[compl_order_qty] [int] NULL)
insert into [dbo].[Lotame_JSON]
values('105646','2016-12-1',1,0,0,1)
insert into [dbo].[Lotame_JSON]
values('125646','2016-12-1',0,0,1,0)
insert into [dbo].[Lotame_JSON]
values('112646','2016-12-1',0,1,1,0)
insert into [dbo].[Lotame_JSON]
values('106446','2016-12-1',0,0,1,0)
我有疑问:
select
[lead_id] AS 'userid',
(
SELECT segment
from
(
SELECT
CASE WHEN [online_flag] > 0 THEN '1' else null end as 'online_flag',
CASE WHEN sched_appt_qty > 0 THEN '2' else null end as 'Schedule_Appointment',
CASE WHEN enroll_order_qty > 0 THEN '3' else null end as 'Enrolled_Order',
CASE WHEN compl_order_qty > 0 THEN '4' else null end as 'Complete_Order'
FROM [dbo].[Lotame_JSON] as sub
WHERE sub.lead_id = main.lead_id
) t
UNPIVOT
(
segment1
for segment in (online_flag,Schedule_Appointment,Enrolled_Order,Complete_Order)
) as UnPvot
for JSON PATH
) AS 'segments'
from [dbo].[Lotame_JSON] as main
where online_flag = 0 and (sched_appt_qty > 0 or enroll_order_qty > 0 or compl_order_qty > 0)
and dist_date_key >= '2016-9-1'
FOR JSON PATH
谢谢
【问题讨论】:
-
您使用的是哪个版本的
SQL SERVER? -
您也可以添加您已经使用的查询来获得到目前为止的结果。
-
已更新,感谢您的帮助!!
-
在这里发布代码、数据或查询结果的图像而不是文本被认为是非常不礼貌的。
-
@JoelCoehoorn 已更新,感谢您的建议,您太好了
标签: sql sql-server json sql-server-2016