У меня есть некоторые данные, которые выглядят примерно так:
---------------------------------------------
ID |EVENTDATETIME |CATEGORY |SOMEPROPERTY
---------------------------------------------
1 |20/03/2020 14:30 |CAT A |1
2 |20/03/2020 16:10 |CAT B |1
3 |20/03/2020 09:14 |CAT A |1
4 |20/03/2020 10:26 |CAT A |0
5 |21/03/2020 11:31 |CAT B |1
6 |21/03/2020 10:26 |CAT B |0
7 |22/03/2020 11:31 |CAT A |1
---------------------------------------------
По сути, мне нужно (в SQL) как-то повернуть эти данные примерно так:
---------------------------------------------
DAY |MONTH |YEAR |TOTAL ITEMS |SOMEPROPERTY%
---------------------------------------------
20 |MARCH |2020 |4 |75%
21 |MARCH |2020 |2 |50%
22 |MARCH |2020 |1 |100%
---------------------------------------------
Где SOMEPROPERTY% - это% от общего числа элементов в тот день, когда для свойства установлено значение 1 (это может быть 1 или 0).
Мне также может понадобиться добавить CATEGORY в качестве дополнительного уровня, чтобы данные также группируются по этому:
-------------------------------------------------------
DAY |MONTH |YEAR |CATEGORY |TOTAL ITEMS |SOMEPROPERTY%
-------------------------------------------------------
20 |MARCH |2020 |CAT A |3 |66%
20 |MARCH |2020 |CAT B |1 |100%
21 |MARCH |2020 |CAT B |2 |50%
22 |MARCH |2020 |CAT A |1 |100%
-------------------------------------------------------
Кто-нибудь может помочь?
Нужно быть одним оператором SQL - я пытался сделать это с помощью GROUP BY, но получилось довольно грязно и дает странные результаты. Я думаю, что это возможно с PIVOT, но я не могу найти хороший пример, и это не самая простая команда для игры.
nb Я знаю, что такого рода вещи обычно делаются на уровне представления, а не чем непосредственно в SQL, но у меня нет этой возможности, где это необходимо.
Спасибо.