基于另一列的总和列laravel
问题描述:
我想总结一列AMOUNT,结果是填充列BALANCE。如果列类型是DEBIT,那么它将总和..但是如果列类型是KREDIT,那么它将是负的。这是表table image基于另一列的总和列laravel
创建该表中,我使用这个查询中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以获得有效的代码 - 不包括贷方加入和您的其他条件。
你的意思是替换上面的查询吗?得到这个错误:#1064 - 你的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以便在'descript ='Credit'then statement.amount else 0 end'附近使用正确的语法 - (sum(case when line =“Deb'at line 2 – arbong
what is the数据库字段名称您在哪里存储了“借方”/“贷方”值? –
数据库字段名称其中存储了“借方”/“贷方”值是描述 – arbong