php - mysql datatable.net 总计行值无法正常工作
问题描述
使用 Mysql,我需要计算给定行上的总值,我尝试这样做失败了,结果异常,一行工作,其他行没有显示总数据。此电话参考了 scaisEdge 之前接听的电话,谢谢。
我在输出中得到了值,但只是一行,所以它的行为不像我预期的那样。
$rows = $wpdb->get_results("
select
t.Symbol AS Symbol
, t.Portfolio AS Portfolio
, max(Janx) AS Janx
, max(Febx) AS Febx
, max(Marx) AS Marx
... etc.
, max(Decx) AS Decx
, (
max(Janx)
+ max(Febx)
+ max(Decx)
) AS Total
from (
SELECT
s.symbol AS Symbol,
p.code AS Portfolio,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Jan' then
IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity
* -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Janx,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Feb' then
IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity *
-1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Febx,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Mar' then
IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Marx,
... etc
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Dec' then
IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Decx
FROM dm_transactions t
INNER JOIN dm_dividends d ON (d.stock_id = t.stock_id)
INNER JOIN dm_stocks s ON (s.id = t.stock_id)
INNER JOIN dm_portfolios p ON (t.portfolio_id = p.id)
WHERE ANY_VALUE(d.pdate) >= CURDATE()
AND
t.user_id >= IF($user_id=4,2,$user_id)
AND
t.user_id <= IF($user_id=4,3,$user_id)
GROUP BY s.symbol,d.pdate
) t
GROUP BY t.Symbol, t.Portfolio
... etc.
foreach ($rows as $row ){
echo "<tr>";
echo "<td>$row->Portfolio</td>";
echo "<td>$row->Symbol</td>";
echo "<td>$row->Janx</td>";
... etc.
echo "<td>$row->Decx</td>";
echo "<td>$row->Total</td>";
总值未正确汇总,有些行没有显示总值,当有数据时,我怀疑我的 SQL 查询一定不正确。我的报告的所有其他方面都在发挥作用。
希望是我的一个简单错误。
提前谢谢了
科林
解决方案
我的 IFNULL 表达式没有正确定位在 MySQL 语句中,修改后的 IFNULL 语句如下所示
SELECT
ANY_VALUE(s.symbol) AS Symbol,
ANY_VALUE(p.code) AS Portfolio,
IFNULL((case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Jan' then CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100) end),0) AS Janx,
IFNULL((case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Feb' then CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100) end),0) AS Febx,
谢谢科林
推荐阅读
- java - Workmanager(registerPeriodicTask)颤动,但我的应用程序每次在后台运行时都会崩溃
- javascript - Ajax 请求从数据库中获取数据并返回
- javascript - 错误凭证和注册令牌都属于同一个 Firebase 项目
- mysql - mysql 选择加入 4 个表
- python-3.x - 如何矢量化创建具有基于其他列的值的新列?
- tomcat - Tomcat Catalina 日志文件自定义
- java - 来自 REST 的 @DateTimeFormat 变量给出 null
- javascript - 如何提取 div 文本以供以后在 Cypress 中使用?
- javascript - 如果子项在垂直列表中处于活动状态,则保持导航菜单打开
- django - Django & intercooler.js : 使用 Intercooler.js 将变量传递给视图