c# - 如何从本地数据库计算百分比数字
问题描述
我目前正在尝试计算预算内剩余的百分比。我创建的应用程序是一个预算应用程序。我将用于计算的两列是 BudgetAmount(这是预算的当前余额)和 TransactionAmount(用于将费用和收入输入预算)。我不确定如何将 sql 查询的结果保存为十进制值,以便计算出百分比。任何帮助将不胜感激,在此先感谢您。
(TransactionType = 2) - 这意味着这种类型的交易是一笔费用
这是我认为的获取数据的两条sql语句?
SqlCommand percentage = new SqlCommand("select * from UserBudget where budgetID=@budgetid", conn);
SqlCommand percentage2 = new SqlCommand("select * from userbudgettransaction where budgetID=@budgetid AND TransactionType = 2", conn);
以下是我正在使用的数据库列:
UserBudget UserBudget UserBudgetTransaction
解决方案
这是一个带有一些示例数据的示例:请注意,我已将除数乘以 100 以获得实际百分比。
create table UserBudget (BudgetId int, BudgetAmount varchar(50))
create table UserBudgetTransaction (UserBudgetTransactionId int, BudgetId int, TransactionAmount decimal(18, 2), TransactionType int)
insert into UserBudget (BudgetId, BudgetAmount) values (1, '100000')
insert into UserBudget (BudgetId, BudgetAmount) values (2, '200000')
insert into UserBudgetTransaction (UserBudgetTransactionId, BudgetId, TransactionAmount, TransactionType ) values (3, 1, '1000', 1)
insert into UserBudgetTransaction (UserBudgetTransactionId, BudgetId, TransactionAmount, TransactionType ) values (4, 1, '20000', 2)
insert into UserBudgetTransaction (UserBudgetTransactionId, BudgetId, TransactionAmount, TransactionType) values (5, 1, '50000', 2)
declare @budgetId int = 1
select * from UserBudget
select * from UserBudgetTransaction
SELECT (SUM(TransactionAmount) / BudgetAmount) * 100 as Percentage
FROM UserBudget JOIN UserBudgetTransaction ON UserBudget.BudgetID = UserBudgetTransaction.BudgetID
WHERE UserBudget.BudgetID = @budgetid AND TransactionType = 2
group by UserBudget.BudgetID, BudgetAmount
这将返回这些值:
在代码中:
var sql = @"SELECT (SUM(TransactionAmount) / BudgetAmount) * 100 as Percentage
FROM UserBudget JOIN UserBudgetTransaction ON UserBudget.BudgetID = UserBudgetTransaction.BudgetID
WHERE UserBudget.BudgetID = @budgetid AND TransactionType = 2
group by UserBudget.BudgetID, BudgetAmount";
decimal result;
using (var conn = new SqlConnection("Server=localhost;Database=Budgets;Trusted_Connection=True"))
{
using (var cmd = new SqlCommand(sql, conn))
{
cmd.CommandType = CommandType.Text;
var parameter = cmd.Parameters.Add("budgetId", SqlDbType.Int);
parameter.Value = 1;
conn.Open();
result = (decimal)cmd.ExecuteScalar();
}
}
Console.WriteLine(result);
返回:
推荐阅读
- android - 通知数据更改后,项目的Recyclerview右边框正在切割
- vue.js - 使用 gitlab runner 将 vuejs 应用程序部署到 ubuntu 服务器时出错
- complex-event-processing - Esper epl 案例陈述 - 你能说如果 X 在(A、B 或 C)中,那么 Y
- python - 调用函数:select_by_value Selenium Python
- meson-build - 如何使用命令行参数指定外部依赖项包括 dir 和 lib 文件名?
- c# - 尝试将日期时间变量值设置为空
- groovy - 在jenkins groovy管道中迭代列表并利用matches()正则表达式
- reactjs - React PrivateRoute 身份验证和未解决的令牌承诺问题
- css - 固定行和列 HTML 表格,仅使用 CSS 进行水平垂直滚动
- python - 括号中的 Python Pandas 正则表达式数字从列到列表