--一条经典的统计输出语句--Query output. DECLARE @iMaxID int DECLARE @iMinID int SELECT @iMinID = MIN(iID), @iMaxID = MAX(iID) FROM [t1] DECLARE @tb table(iID int,a1 money,b1 money,c1 money) WHILE (@iMinID <= @iMaxID) BEGIN INSERT INTO @tb (iID,a1,b1,c1) (SELECT t0.iID,t0.a1,t0.a2 ,t1.c1 FROM (SELECT iID, SUM(a1 - b1) AS c1 FROM t1 WHERE @iMinID <= @iMaxID) t0 inner join t1 on t0.iID = t1.iID ) SET @iMinID = @iMinID + 1 END SELECT * FROM @tb
c1 = a1 - b1; c2 = c1 + a2 - b2; c3 = c2 + a3 - b3; 以此类推。
C0 = 0;c1 = C0 + a1 - b1; c2 = c1 + a2 - b2; c3 = c2 + a3 - b3;
这样就很简单了三,先取出a,b的表做一个循环得到所有的c,那么再进行数据绑定就可以了!
i=1;
while(c[i]<n)
{
c[i]=c[i-1]+a[i]-b[i];
++i;
}
这就是cl的算法;
DECLARE @iMaxID int
DECLARE @iMinID int
SELECT @iMinID = MIN(iID), @iMaxID = MAX(iID) FROM [t1]
DECLARE @tb table(iID int,a1 money,b1 money,c1 money)
WHILE (@iMinID <= @iMaxID)
BEGIN
INSERT INTO @tb (iID,a1,b1,c1)
(SELECT t0.iID,t0.a1,t0.a2 ,t1.c1
FROM (SELECT iID, SUM(a1 - b1) AS c1
FROM t1
WHERE @iMinID <= @iMaxID) t0
inner join t1
on t0.iID = t1.iID
)
SET @iMinID = @iMinID + 1
END
SELECT * FROM @tb
再作一个循环,算出第三列,重新生成一个包含第三列的DataTable就可以了。
程序如下:
private DataTable GetNewTable(DataTable oldTable){
DataTable result = new DataTable();
foreach(DataColumn column in oldTable.Columns){
result.Columns.Add(column.ColumnName);
} result.Columns.Add("费用3"); double feiyong3 = 0.0;
foreach(DataRow row in oldTable.Rows){
DataRow currentRow = result.NewRow();
currentRow["费用1"] = row["费用1"];
currentRow["费用2"] = row["费用2"];
feiyong3 += Convert.ToDouble(row["费用2"].ToString()) - Convert.ToDouble(row["费用1"].ToString());
currentRow["费用3"] = feiyong3; result.Rows.Add(currentRow);
} return result;
}
please give ZhengJing & JinXj 100Fun/Man
我用你的代码,第三列怎麽没反应?
第二个在列上使用sql,行上可以在.cs文件中处理。下面是一个例子:private void SetFooterStatisticData()
{
//计算页面小计的
double dYearplan,dTotalFee,dRemain;
dYearplan=0.00;
dTotalFee=0.00;
dRemain=0.00; if(dgProgressReport.Items.Count>0)
{
for(int i=0;i<dgProgressReport.Items.Count;i++)
{
Label _labDept=(Label)dgProgressReport.Items[i].FindControl("LabDept"); if(_labDept!=null)
{
if(_labDept.Text.Trim().Length>0)
{
Label _labPlan=(Label)dgProgressReport.Items[i].FindControl("LabPlan");
Label _labTotal=(Label)dgProgressReport.Items[i].FindControl("LabTotal"); //计算年度预算的合计
if(_labPlan.Text.Trim().Length>0)
dYearplan=dYearplan+double.Parse(_labPlan.Text.ToString()); //计算累计用款的合计
if(_labTotal.Text.Trim().Length>0)
dTotalFee=dTotalFee+double.Parse(_labTotal.Text.ToString());
}
}
} //计算剩余额度
dRemain=dYearplan-dTotalFee; _labYearPlan.Text=dYearplan.ToString("#0.00");
_labTotalFee.Text=dTotalFee.ToString("#0.00");
_labRemain.Text=dRemain.ToString("#0.00"); }
}
this.dataGrid1.SetDataBinding(table,null);
其中table是指生成的新的DataTable。
这个帖子是有月余,但第一个问题还未解决,不知以上哪个答案是正确的?
请明示。解决了马上结帐。