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

时间:2014-03-27 19:07:08

标签: c# sql sql-server sql-server-2008

这是我第一次使用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有1月(作为上个月),我填写当月2月。有一个名为“验证”的pushButton 如果我点击验证,则2月份的3列总和将与1月份的1列总和进行比较。

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

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

我需要c#和sql数据库专家的帮助才能有机会这样做,因为我不确定我的选择是什么!

更新:我正在视觉工作室做一些实验。所有代码都只是丑陋但如果有人想要尝试,我会将它上传到Dropbox。

1 个答案:

答案 0 :(得分:0)

我认为这里最好的解决方案是将业务逻辑和数据库查询分开。如果用户点击&#34;验证&#34; &#34;二月&#34;在行中,您只需提交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?)
}