我在這樣的表中有行:
| 組織機構 | 租戶 | 方面 | 數數 |
|---|---|---|---|
| 一個 | T1 | 月活 | 100 |
| 一個 | T1 | WAU | 70 |
| 乙 | T2 | 月活 | 50 |
| 乙 | T2 | 保留 | 30 |
現在我需要根據 ORG、租戶和剩余的列進行分組,我需要將其轉換為單個 JSON,如下所示。
| 組織機構 | 租戶 | 自定義資料 |
|---|---|---|
| 一個 | T1 | {月活:100,周活:70} |
| 乙 | T2 | {月活躍用戶:50,留存:30} |
如何在 SQL Server 或使用 C# 中實作這一點?我們對此有開箱即用的支持嗎?
謝謝你的幫助,耐克什
uj5u.com熱心網友回復:
任何特定的解決方案都與您的環境相關,并且它的執行速度可能不夠快。但是,您可以使用 C# 來重塑您的記錄串列。像這樣創建一個新的 JSON 物件:
{
"MAU": [
{
"ORG": "A",
"Tenant": "T1",
"Dimension": "MAU",
"Count": 100
}
],
"WAU" : [...]
}
uj5u.com熱心網友回復:
用 LINQ-to-SQL 運算式實作。
第一個 group byOrg和Tenant,對于分組結果部分,CustomData屬性應用為 Dictionary/KeyValuePair。
var result = dataList
.GroupBy(x => new { x.Org, x.Tenant },
(key, g) => new
{
Org = key.Org,
Tenant = key.Tenant,
CustomData = g.ToDictionary(y => y.Dimension, y => y.Count)
})
.ToList();
.NET 小提琴示例
輸出
[
{
"Org": "A",
"Tenant": "T1",
"CustomData": {
"MAU": 100,
"WAU": 70
}
},
{
"Org": "B",
"Tenant": "T2",
"CustomData": {
"MAU": 50,
"Retention": 30
}
}
]
注意:
由于CustomData作為 Dictionary/KeyValuePair 應用,因此在映射之前鍵必須是唯一的。如果在輸入資料中存在具有相同Org、Tenant和Dimension的記錄,那么您需要將這 3 個屬性/列分組并首先執行聚合總和。
uj5u.com熱心網友回復:
你的資料
CREATE TABLE test(
ORG VARCHAR(100) NOT NULL
,Tenant VARCHAR(100) NOT NULL
,Dimension VARCHAR(100) NOT NULL
,Count1 INTEGER NOT NULL
);
INSERT INTO test
(ORG,Tenant,Dimension,Count1) VALUES
('A','T1','MAU',100),
('A','T1','WAU',70),
('B','T2','MAU',50),
('B','T2','Retention',30);
為了得到你想要的結果,你可以使用String_agg和Concat不使用For Json Path
select
ORG,
Tenant,
concat('{',string_agg(concat(Dimension,':',Count1),','),'}' ) CustomData
from test
group by ORG,Tenant
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/489451.html
