簡體   English   中英

基於另一列 laravel 的 sum 列

[英]sum column based on another column laravel

我想對列 AMOUNT 求和,結果是填充列 BALANCE。 如果 TYPE 列是 DEBIT,那么它將求和……但如果 TYPE 列是 KREDIT,那么它將是負數。 這是桌子桌子圖片

為了創建該表,我在 laravel 控制器中使用了這個查詢:

$get_result        =  DB::select( DB::raw("SELECT statement.created_at, statement.descript, statement.amount, statement.sign, statement.reference 
                                                    FROM statement,lender 
                                                    WHERE statement.created_at BETWEEN DATE_ADD(' $date_from ',INTERVAL 1 DAY) 
                                                    AND '$date_to' 
                                                    AND statement.lender_id = lender.id 
                                                    AND lender.user_id= $userId ") );

我使用此代碼來顯示數據:

<thead>
                                <tr class="txtcenter">
                                    <th class="all">Date </th>
                                    <th class="all">Description </th>
                                    <th class="all">Amount</th>
                                    <th class="all">Type</th>
                                    <th class="all">Reference</th>
                                    <th class="all">Balance</th>
                                </tr>
                            </thead>
                            <tbody>@foreach($get_result as $statement)
                                    <tr class="accordion">
                                        <td>{{SUBSTR($statement->created_at,0,10) }}</div>
                                        <td>{{$statement->descript}} </div>
                                        <td>IDR {{number_format($statement->amount, 0, '.', ',')}}  </div> 
                                        <td>{{ $statement->sign }}  </div>
                                        <td>{{ $statement->reference }} </div>
                                        <td>  </div>
                                    </tr>@endforeach
                            </tbody>

我不知道如何制作正確的代碼來計算這一切。 請幫幫我。 提前致謝

試試這個查詢

SELECT statement.created_at, statement.descript, statement.amount, statement.sign, statement.reference,
(sum(case when  statement.descript = 'Credit' then statement.amount else 0 end) -
sum(case when  statement.descript = 'Debit' then statement.amount else 0 end)) balance
  FROM statement,lender  WHERE statement.created_at BETWEEN DATE_ADD(' $date_from ',INTERVAL 1 DAY)  AND '$date_to' AND statement.lender_id = lender.id  AND lender.user_id= $userId

對此的“經典”方法(它是運行總和的特例)是使用相關查詢:

SELECT statement.created_at, statement.descript, statement.amount, statement.REFERENCE,
    ( SELECT 
      SUM(CASE WHEN t2.descript = 'Debit'  THEN t2.amount 
               WHEN t2.descript = 'Credit' THEN -t2.amount ELSE 0 END ) 
      FROM statement t2
      WHERE t2.created_at <= statement.created_at
    ) AS Balance
FROM statement
ORDER BY statement.created_at ;

或使用像這樣的 sql 變量:

SET @csum := 0;
SELECT statement.created_at, statement.descript, statement.amount,
       statement.REFERENCE,
    (CASE WHEN statement.descript = 'Debit' THEN
            (@csum := @csum + statement.amount)  
          WHEN statement.descript = 'Credit' THEN 
            (@csum := @csum - statement.amount)  
         ELSE  0  
     END) as Balance
FROM statement
ORDER BY statement.created_at ;

檢查sqlFiddle的工作代碼 - 不包括貸款人加入和您的其他 where 標准。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM