【发布时间】:2018-07-13 21:28:42
【问题描述】:
我正在测试一个示例应用程序,该应用程序添加了许多个人,即“人”,并为每个人记录了一年中每个月的时间度量,即“minTime”一个十进制值,“auxTime”一个十进制值。
在我的代码中,我遍历了一个 SQL 数据库表,以计算每个人小时数的十进制值。 “person”是一个 nvarchar,“yearTotal”是一个小数。
我想在 ListView 屏幕中显示总数。
出于测试目的,我添加了 2 人。每个人都有一个为 12 个月中的每一个输入的时间度量。
我遇到了两个问题。
1) 尝试将“yearTotal”添加到 ListView 控件,最终显示 每个月 的 12 个月价值数据中的每个人。
例如:John Smith 50 小时、John Smith 75 小时等,而不是 John Smith 的总数,这适用于所有人。
2) 一旦“yearTotal”达到第一个人的正确总数,它就会保持这个值并为下一个人增加它,为所有后续人提供一个错误的值。
我需要知道如何(以及在何处)将每个人的年度总计添加到 ListView 控件的一个条目中,而不是同一个人的多个条目。
例如:John Smith 840 小时,Sally Jones 750 小时。
这里是一个下载“testDB”的链接,其中包含一个名为“timeRecord”的表。 请记住,我需要一种方法来完全总计每个人的值,总计他们从 1 月到 12 月的值,并在 ListView 控件中显示该人的总计。
当我尝试在 minTime 和 auxTime 列(带有别名)上使用 SUM 时,SQL 仍会显示各个月份的总计,但不会显示每个人的单个总计。 sample database
【问题讨论】:
-
不要使用 for 循环,只需将命令更改为:
SELECT PEOPLE, SUM(MINTIME) FROM TIEMTABLE ORDER BY PEOPLE ASC GROUP BY PEOPLE它将解决所有问题 -
你好,Aleksa。我尝试了您的建议,但我相信 ORDER BY 子句必须是您在查询中指定的最后一个子句。但是,当我将 GROUP BY 人放在 ORDER BY 人之后,我在“minTime”上不断收到错误消息。当我深入研究错误时,它会在“minTime”上报告 System.IndexOutOfRangeException,尽管 SQL Server Management Studio 显示所有人都有 minTime 数据。不确定为什么会发生此错误。
标签: c# winforms sql-server-2012-express