比如,3个字段
编码 当前金额 余额
A1, 100, 400
A1, 200, 400
A2, 300, 500
A2, 300, 500
它们是一个集合比如说,编码为A1,的余额是400,本集合,A1的和加起来小于400,返回TURE,大于400返回FALSE 编码为A2的也是一样。
大家有什么好方法可以帮我解决,在线等,急!
编码 当前金额 余额
A1, 100, 400
A1, 200, 400
A2, 300, 500
A2, 300, 500
它们是一个集合比如说,编码为A1,的余额是400,本集合,A1的和加起来小于400,返回TURE,大于400返回FALSE 编码为A2的也是一样。
大家有什么好方法可以帮我解决,在线等,急!
select 编码,count(当前金额),max(余额) from 表 group by 编码
这个集合就是 A的集合了。
写一个方法bool fa(string type);
调用时 : fa(A1);fa(A2);
方法内 就是遍历集合的问题了,就不说了。
public bool Check()
{
using(SqlConnection con = new SqlConnection("连接字符串"))
{
conn.Open();
SqlCommand cmd = new SqlCommand("select 编码,当前金额,余额 from yourtable where 编码=A1",conn);
int left = 0, sum = 0;
using(SqlDataReader dr = cmd.ExecuteReader())
{
while(dr.Read())
{
left = Convert.ToInt32(dr["余额"]);
sum += Convert.ToInt32(dr["当前金额"]);
}
}
return sum < left;
}
}大概写了下,没测试
select 编码,sum(当前金额),max(余额),case when sum(当前金额)<=max(余额) then 'TRUE' else 'false' end from 表 group by 编码
在SQL2005中测试,成功了。
输出为:
A1 300 400 TRUE
A2 800 500 false
第二,A1,的余额都是400,
但是,我开发票的时候,我可以第1次开,100,第2次开200
同理,A2也是一样。
我这个东东,其实来实现一个,多开发票情况中,判断余额,这些数据,是分别取出来,放在一个集合,或,多维数组进行判断,所以,用SQL没用,如果实在,不性,建个临时表,用你那种方法,嘿嘿。
我想用一个算法来实现它
这个集合就是 A的集合了。
写一个方法bool fa(string type);
调用时 : fa(A1);fa(A2);
方法内 就是遍历集合的问题了,就不说了。
2。 A1, 200, 400
3。 A2, 300, 500
4。 A2, 300, 500 我第一条记录,它是100<400,和它相同的第2条记录的余额相加,100+200<400但是3和4条记录,A2,300+300>500这样说吧,只要有大余,余额的就返回FALSE,这样感觉要简单点?大家帮帮忙,郁闷死了
第一个哈西表 Key :A1,A2,..., Value: 400,500...
第二个哈西表 Key :A1,A2,..., Value:100+200,300,300(这里需要循环处理)这样做一个函数,把key 传进来,比较两个哈西表的值就行了。
比如我这个实现比较适用于只查询某一个 account是否还可以开票,但如果要做一个总体开票情况分析有很多条记录的,我觉得还是用SQL方便。public class Invoice
{
public string Code{get;set;}
public int Value{get;set;}
public int Total{get;set;} public Invoice(string c,int v,int t){Code = c;Value =v;Total = t;}
}public bool Foo(List<Invoice> invoices,string name)
{
int values=0;
int maxtotal=0;
foreach(Invoice i in invoices)
{
if(i.Code == name)
{
values +=i.Value;
if(i.Total>maxtotal)maxtotal = i.Total;
}
}
return values<=maxtotal;
}