创建月度报表,并根据总和比较行

本文关键字:比较 报表 创建 | 更新日期: 2023-09-27 17:54:04

这是我第一次使用c#和sql server编写一个简单的月度报表应用程序,它将把报表打印到纸上。一切都很好,但有一个复杂的问题,我比较两个值。

假设每个月有14列(原来是37列)和12行。作为月份名称的最后一列。

列是:
Name, col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,monthName.
从逻辑上讲,一年将有12个报告。

col2 + col5 + col6

Col7 +col10+col11当前月的和
必须与上个月col4和col9-12行相同

这是我的主要问题!

例如,如果monthName包含January(作为过去的月份),而我要填充当前月份February。有一个按钮叫做"验证"。
如果我点击验证,那么2月份的3列总和将与1月份的1列总和进行比较。

我已经尝试了一些sql查询像select * from table1 where sum(col4)=sum(col2+col5+col6) and sum(col9)=sum(col7+col10+col11)但是我的逻辑和知识是完全错误的,因为它没有像预期的那样工作。

其次,我认为将sql查询结果中的数据附加到List<>并比较col4/col9将是一个想法,但又有缺陷,因为不能保证Name列的值不会被洗牌,这将导致比较错误的数据,我也没有信心。

我需要c#和sql数据库专家的帮助来得到一个想法,因为我不确定我的选择是什么!

更新:我正在做一些实验在visual studio。所有的代码都很丑,但如果有人愿意尝试,我会把它上传到dropbox上。

创建月度报表,并根据总和比较行

我认为这里最好的解决方案是保持业务逻辑和数据库查询分开。如果用户单击"二月"行上的"验证"按钮,您只需按照SELECT * FROM table1 WHERE monthName = 'january'的行提交一个数据库查询,尽管:

  • 也许你实际上应该使用日期字段来标识你的月份)。
  • 如何实际检索数据将取决于您正在使用的数据访问类型(ADO)。. NET、实体框架等)

得到结果后,只需使用简单的c#逻辑进行验证,如下所示:

int priorMonthSum1 = priorMonthResultset.col4;
int priorMonthSum2 = priorMonthResultset.col9 + priorMonthResultset.col10 + priorMonthResultset.col11 + priorMonthResultset.col12;
int currentMonthSum1 = currentMonthResultset.col2 + currentMonthResultset.col5 + currentMonthResultset.col6;
int currentMonthSum2 = currentMonthResultset.col7 + currentMonthResultset.col10 + currentMonthResultset.col1;
if(priorMonthSum1 != currentMonthSum1 || priorMonthSum2 != currentMonthSum2) 
{
    // handle mismatch (highlight red?)
}
else
{
    // handle match (highlight green?)
}