我在 SQL Server 中有一個表格,表格如下:
| 日期 | 用戶身份 | 會話開始時間 | 會話結束時間 | n點擊次數 |
|---|---|---|---|---|
| 2020-01-01 | 0 | 9:00:00 | 9:15:10 | 4 |
| 2020-01-01 | 0 | 9:33:00 | 10:05:05 | 2 |
| 2020-01-01 | 2 | 9:05:20 | 9:25:55 | 9 |
| ... | ... | ... | ... | ... |
我期待PIVOT它通過userId與date和得到的東西,它整合其他列作為一個JSON陣列。預計輸出如下所示:
| 日期 | 用戶身份 | 資料 |
|---|---|---|
| 2020-01-01 | 0 | [{'sessionStartTime':9:00:00, 'SessionEndTime':9:15:10, 'nClicks':4}, {'sessionStartTime':9:33:00, 'SessionEndTime':10:05:05, 'nClicks':2}] |
| 2020-01-01 | 2 | [{'sessionStartTime':9:05:20, 'SessionEndTime':9:25:55, 'nClicks':9}] |
| ... | ... | ... |
關于如何在 SQL (T-SQL) 中實作這一點的任何想法?
uj5u.com熱心網友回復:
不幸的是,SQL Server 不支持JSON_AGG,這會使事情變得簡單。
@Zhorov 的回答需要自聯接,但這實際上可以通過對表的單次掃描和正常聚合來完成,使用STRING_AGG:
SELECT
[date],
[userId],
STRING_AGG(N'[' [data] N']', N',')
FROM Data d
CROSS APPLY (
SELECT [sessionStartTime], [SessionEndTime], [nClicks]
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
) j (data)
GROUP BY
[date],
[userId];
資料庫<>小提琴
uj5u.com熱心網友回復:
你需要生成的每個不同組合的JSON內容[date]和[userId]:
桌子:
SELECT *
INTO Data
FROM (VALUES
('2020-01-01', 0, '9:00:00', '9:15:10', 4),
('2020-01-01', 0, '9:33:00', '10:05:05', 2),
('2020-01-01', 2, '9:05:20', '9:25:55', 9)
) v ([date], [userId], [sessionStartTime], [SessionEndTime], [nClicks])
T-SQL:
SELECT DISTINCT [date], [userId], [data]
FROM Data d
OUTER APPLY (
SELECT [sessionStartTime], [SessionEndTime], [nClicks]
FROM Data
WHERE d.[date] = [date] AND d.[userId] = [userId]
FOR JSON PATH
) j (data)
結果:
| 日期 | 用戶身份 | 資料 |
|---|---|---|
| 2020-01-01 | 0 | [{"sessionStartTime":"9:00:00","SessionEndTime":"9:15:10","nClicks":4},{"sessionStartTime":"9:33:00","SessionEndTime": "10:05:05","nClicks":2}] |
| 2020-01-01 | 2 | [{"sessionStartTime":"9:05:20","SessionEndTime":"9:25:55","nClicks":9}] |
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/375382.html
標籤:sql json sql-server 查询语句 azure-sql-数据库
上一篇:無法從api回應決議json
下一篇:我如何從反應中的事件中獲得價值?
