使用 SQL PIVOT 按日期按百分比汇总数据

Summarise data by date with percentages using SQL PIVOT

我有一些数据看起来像这样:

---------------------------------------------
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 可能是可行的,但我找不到一个很好的例子,而且它不是最容易使用的命令。

n.b。我知道这类事情通常会在表示层中完成,而不是直接在 SQL 中完成,但我没有在需要的地方选择。

谢谢。

使用条件聚合。为此,我将假设 SQL 服务器:

select convert(date, eventdatetime) as dte, category,
       count(*) as total_items,
       avg( someproperty * 1.0 ) as ratio
from t
group by convert(date, eventdatetime), category;

无需将 year/month/day 分列。

Oracle 中的等效函数是 trunc(eventdatetime)。无论您使用什么数据库,都有类似的功能。