sql - 对字符串中不同键值对的数据进行分组
问题描述
我有一个LOG
包含字段的表NOTES
。表LOG
还包含一个字段NrofItems
。这是在 Azure SQL 上。NOTES
是一个包含以分号分隔的键值对的字符串。键值对的顺序是随机的。密钥是已知的。
三个记录的示例:
NOTES | NrofItems
"customer=customer1;code=blablabla;application=SomeApplication" | 23
"code=adfadfadf;customer=customer99;application=AlsoApplication" | 33
"code=xyzxyzxyz;application=AlsoApplication;customer=customer1" | 13
"code=blablabla;customer=customer1;application=SomeApplication" | 2
我需要将每个客户每个应用程序的 NrofItems 的值相加...,如下所示:
customer1 | blablabla | SomeApplication | 25
customer1 | xyzxyzxyz | AlsoApplication | 13
customer99 | adfadfadf | AlsoApplication | 33
我希望能够使用一个或多个键值对来进行分组。
我确实知道如何进行一个分组,但是如何进行更多呢?
请参阅此 URL 以了解如何为一个分组执行此操作:Group By on part of string
解决方案
嗯。为此,我认为分别提取客户和应用程序是一种方便的方法:
select c.customer, a.application, sum(nrofitems)
from t outer apply
(select top (1) stuff(s.value, 1, 10, '') as customer
from string_split(t.notes, ';') s
where s.value like 'customer=%'
) c outer apply
(select top (1) stuff(s.value, 1, 12, '') as application
from string_split(t.notes, ';') s
where s.value like 'application=%'
) a
group by c.customer, a.application;
这是一个 db<>fiddle。
推荐阅读
- django - Django 选择字段重命名第一个选项
- http - 应该返回什么状态码,如果文件,代表资源不在服务器上
- python-3.x - 在 Pandas Dataframe 列中查找某些单词,如果找到,将它们添加到新列中
- python - 在列表列表中转换 Pandas 数据框
- python - NSEpy giving ValueError: Please check start and end dates when trying to retrieve historical stock information
- botframework - 使用 Microsoft Teams 在 Azure Blob 上设置防火墙 - Bot Framework
- flutter - 为什么我无法在 Future builder 中的 PageView.builder 中更改页面?
- security - 解包缓冲区的安全风险是什么?
- go - gorilla mux 在使用变量时为静态文件设置了错误的路径
- eslint - ESLint:需要对基于字符串的枚举键进行排序