php sql中带有日期、变量类别和总和值的数据透视表

Posted

技术标签:

【中文标题】php sql中带有日期、变量类别和总和值的数据透视表【英文标题】:Pivot table with date, variable categories and sum values in php sql 【发布时间】:2014-12-25 15:03:12 【问题描述】:

我想从 php 中的 SQL 选择创建费用数据透视表,其中日期将是行,类别将按数据列和特定日期的所有费用的总和,类别将是表数据。

原始数据存储在 SQL 表中:

ID - DATE - CATEGORY - CAT. NAME - PRICE
01 - 1/01 - 1        - CAR       - 5
02 - 1/01 - 2        - FOOD      - 10
03 - 1/02 - 2        - FOOD      - 10
04 - 1/02 - 2        - FOOD      - 10
05 - 1/02 - 4        - HOUSE     - 50
06 - 1/02 - 1        - CAR       - 5
07 - 1/03 - 1        - CAR       - 5
08 - 1/03 - 2        - FOOD      - 10
09 - 1/03 - 2        - FOOD      - 10
10 - 1/03 - 3        - DOG       - 20

这是费用表。并非每一天都填满了每个类别。

我使用另一个表来存储类别 ID 的表名。

我获取 SQL 请求:

SELECT E.expense_date, C.id_category, C.category_name, SUM(E.price) AS price
FROM expenses E, expenses_category C
WHERE E.category = C.id_category
GROUP BY E.expense_date, C.category_name
ORDER BY E.expense_date ASC, C.category_name, E.price ASC

SQL 请求的结果类似于:

DATE - CAT. NAME - SUM
1/01 - CAR       - 5
1/01 - FOOD      - 10
1/02 - CAR       - 5
1/02 - FOOD      - 20
1/02 - HOUSE     - 50
1/01 - CAR       - 5
1/01 - FOOD      - 20
1/01 - DOG       - 20

但我想将 SQL 选择转移到数据透视表,其中行是日期,数据列是类别,表数据是费用总和。像这样:

      CAR / FOOD / DOG / HOUSE / DAY
1/01   5     10     X     X      25
1/02   5     20     X    50      65
1/03   5     20    20     X      45
SUM   15     50    20    50     135

我已经考虑这个问题大约一个月了,并在过去 6 小时内搜索了答案。不幸的是,我的技能不足以解决这个问题并创建正确的 PHP 代码:

我尝试了几种方法,均未成功。我只知道过程编码,OOP 超出了我的知识范围。

我发现的所有信息/教程只关注有限的类别,而我尝试创建代码,该代码将根据检索到的类别数创建表列数(了解无限)。

谁能帮我设计用于检索数据透视表的 PHP 代码?

【问题讨论】:

【参考方案1】:

考虑到您的数据库结果 $resultTraversable 并且您拥有的 fetch-mode 是 assoc:

foreach($result as $row)

   $table[$row["expense_date"]][$row["category_name"]] = $row["price"];

在新的支出日期之前,您还可以使用 "X" 初始化所有类别字段,以使它们已经在 $table 数组中,或者您在输出未设置的表格时即时执行此操作矩阵中的字段。

与摘要列相同,您需要创建总和(或者您已经在 SQL 查询中执行此操作,应该可以使用 UNION)。

【讨论】:

不适合我,我遇到了与问题启动器相同的问题: 不能使用 stdClass 类型的对象作为数组

以上是关于php sql中带有日期、变量类别和总和值的数据透视表的主要内容,如果未能解决你的问题,请参考以下文章

如何根据火花数据框中的值的累积总和为每一行分配一个类别?

具有日期和类别维度的 SQL 表

在PHP中查找总和的最接近值的算法

MsSQL如何在一次查询中从给定的日期和仓库号获取最近的未来值和值的总和

批处理文件命令输出到名称中带有日期和时间的文件中[重复]

总结不同的日期和类别