mysql datatable.net суммирование значений строк не работает правильно - PullRequest
0 голосов
/ 07 апреля 2019

Используя Mysql, мне нужно вычислить сумму значений в данной строке, мои попытки сделать это потерпели неудачу с необычными результатами, одна строка работала, а другие не показывали суммарных данных.Этот вызов относится к предыдущему вызову, на который ответил scaisEdge, с благодарностью.

mysql, как отобразить значения в одной строке для каждого портфеля, акции

Я получаюзначения в выходных данных, но только для одной строки, поэтому он ведет себя не так, как я ожидал.

$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 голосов
/ 07 апреля 2019

Мое выражение 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,

Спасибо, Колин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...