SQL Server-将营业时间数据标准化为JSON对象

问题描述 投票:0回答:1

我最基本的查询,当我只是从数据库中提取字段时,看起来像这样:

SELECT DISTINCT  
    [BranchCode]
     ,[Weekday]
     ,[OpenTime]
     ,[CloseTime]
FROM [Departments]
WHERE [BranchCode] like '%1001.0000%'

它给我这样的结果:

BranchCode工作日OpenTime CloseTime============================================1001.0000星期五06:00 21:001001.0000星期一06:00 21:001001.0000星期六NULL NULL1001.0000星期日NULL NULL1001.0000星期四08:00 17:001001.0000星期二08:00 17:001001.0000星期三08:00 17:00

我要实现的目标

对于每个BranchCode,此结果都是JSON like

"1001.0000": {
    "HoursOfOpertion": {
        "Monday": {
            "OpenTime": "06:00",
            "CloseTime": "21:00"
        },
        "Tuesday": {
            "OpenTime": "06:00",
            "CloseTime": "21:00"
        },
        "Wednesday": {
            "OpenTime": "06:00",
            "CloseTime": "21:00"
        },
        "Thursday": {
            "OpenTime": "06:00",
            "CloseTime": "21:00"
        },
        "Friday": {
            "OpenTime": "08:00",
            "CloseTime": "17:00"
        },
        "Saturday": {
            "OpenTime": "NULL",
            "CloseTime": "NULL"
        },
        "Sunday": {
            "OpenTime": "NULL",
            "CloseTime": "NULL"
        }
    }
}

我尝试过的

我已经使用PIVOTJOIN达到了死胡同,感觉好像已经接近了,但是我仍然没有得到满足我需求的东西。

SELECT distinct
        [CloseTime]
        ,[Sunday]
        ,[Monday]
        ,[Tuesday]
        ,[Wednesday]
        ,[Thursday]
        ,[Friday]
        ,[Saturday]
FROM [Branches] as br
LEFT JOIN(
    SELECT 
        * FROM (
        SELECT DISTINCT
            [Weekday] as [WD]
            ,[OpenTime]
            ,[CloseTime]
            ,[Closed]
            ,[BranchCode]
        FROM [Departments]

    ) AS SRC PIVOT (
        MAX([OpenTime])
            FOR [WD] IN (
        [Sunday]
        ,[Monday]
        ,[Tuesday]
        ,[Wednesday]
        ,[Thursday]
        ,[Friday]
        ,[Saturday]
        )
    ) as PVT
) p
on p.[BranchCode] = br.[BranchCode]
where br.[BranchCode] like '%1001.0000%'
FOR JSON PATH

它给了我这样的东西:

[
    {
        "CloseTime":"1700",
        "Monday":"0800"
    },
    {
        "CloseTime":"1700",
        "Tuesday":"0800"
    },
    {
        "CloseTime":"1700",
        "Wednesday":"0800"
    },
    {
        "CloseTime":"1700",
        "Thursday":"0800"
    },
    {
        "CloseTime":"1700",
        "Friday":"0800"
    },
    {
        "CloseTime":"1800",
        "Saturday":"0800"
    }
]
sql json sql-server pivot normalization
1个回答
0
投票

以下是两个可以使您接近的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.