Группировать данные по разным парам ключ-значение в строке - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть таблица 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-адрес, чтобы узнать, как это сделать для одной группировки: Группировать по части строки

1 Ответ

2 голосов
/ 16 апреля 2020

Хммм. Для этого, я думаю, что извлечение клиента и приложения по отдельности является удобным способом go:

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 <> скрипка.

...