Sql 将字符串中不同键值对上的数据分组

Sql 将字符串中不同键值对上的数据分组,sql,sql-server,azure-sql-database,Sql,Sql Server,Azure Sql Database,我有一个表LOG,其中包含一个字段NOTES。表LOG还包含一个字段NrofItems。这是在Azure SQL上注释是一个字符串,包含由分号分隔的键值对。键值对的顺序是随机的。钥匙是已知的 三条记录的示例: NOTES | NrofItems "customer=customer1;code=blablabla;application=SomeApplication" | 23 "code=adfadfadf;customer=customer99;application=AlsoA

我有一个表
LOG
,其中包含一个字段
NOTES
。表
LOG
还包含一个字段
NrofItems
。这是在Azure SQL上<代码>注释是一个字符串,包含由分号分隔的键值对。键值对的顺序是随机的。钥匙是已知的

三条记录的示例:

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
我需要计算每个客户每个应用程序每个。。。像这样:

customer1  | blablabla | SomeApplication | 25
customer1  | xyzxyzxyz | AlsoApplication | 13
customer99 | adfadfadf | AlsoApplication | 33
我希望能够使用一个或多个键值对进行分组

我确实知道如何在一个分组中使用它,但如何在更多分组中使用它


查看此URL以了解如何为一个分组执行此操作:

Hmmm。为此,我认为单独提取客户和应用程序是一种方便的方法:

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;

是一个dbfiddle。

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

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;
他是一把小提琴