mysql datatable.net总计行值无法正常工作

时间:2019-04-06 22:52:24

标签: php mysql wordpress

使用Mysql,我需要计算给定行的总值,但我尝试这样做的结果失败,结果异常,一行有效,而其他行未显示总数据。此呼叫参考了scaisEdge先前打过的电话,谢谢。

mysql how to display values on one row for each portfolio, stock

我仅在一行中获取输出值,所以它的行为不符合我的预期。

$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查询不正确。我报告的所有其他方面都在起作用。

希望我是一个简单的错误。

非常感谢

科林

1 个答案:

答案 0 :(得分:0)

我的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,

感谢科林