我最基本的查询,当我只是从数据库中提取字段时,看起来像这样:
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"
}
}
}
我已经使用PIVOT
和JOIN
达到了死胡同,感觉好像已经接近了,但是我仍然没有得到满足我需求的东西。
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"
}
]
以下是两个可以使您接近的解决方案。