首页 > 解决方案 > 对字符串中不同键值对的数据进行分组

问题描述

我有一个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

标签: sqlsql-serverazure-sql-database

解决方案


嗯。为此,我认为分别提取客户和应用程序是一种方便的方法:

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。


推荐阅读