【问题标题】:Creating a monthly report and compare rows based on the sum创建月度报告并根据总和比较行
【发布时间】:2014-03-29 17:58:36
【问题描述】:

这是我第一次使用 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。

【问题讨论】:

  • 您是否考虑过设置单元格的样式,例如使用红色有条件地设置验证按钮?
  • 我试图编辑你的问题。您能否从您描述的表格中添加示例数据以及您期望的输出?
  • 您需要阅读表格设计,特别强调第一、第二和第三范式。关系表规范化。它比名称所暗示的要简单得多。你描述的桌子设计很疯狂。
  • @AndreiD,是的,突出显示不匹配的值或只是消息框。
  • @rene,我还没有开始的例子,因为我才刚刚开始!

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


【解决方案1】:

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

  • 也许您实际上应该使用日期字段来标识您的月份)。
  • 实际检索数据的方式取决于您使用的数据访问类型(ADO.NET、Entity Framework 等)

一旦获得结果,您只需使用简单的 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?)
}

【讨论】:

  • 如果我理解正确: 1. 在每行的列(例如最后一列)中放置一个按钮,当前行比较用户单击时的值?哦,使用 ADO.NET 有时很无聊,因为我需要为每个查询打开连接(ADO.NET)。您的示例似乎很有帮助,但请您详细解释一下吗?
  • 我很乐意为您提供更详细的回答,但如果您可以编辑您的问题以包含您自己代码的相关部分,这将有所帮助。这会给我一些工作。修改您的代码以向您展示我的意思可能比我必须完全从头开始编写代码示例对我来说更快并且对您更有帮助。我看到你提到上传到保管箱...有链接或什么?
  • 我已经以某种方式解决了这个问题。如果您不介意看我的另一篇文章,请:stackoverflow.com/questions/23227892/…
猜你喜欢
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多