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