我有一个带有表的sql server数据库。这些是
1stAP_TB, 2ndAP_TB, 3rdAP_TB, 4thAP_TB, 1steng_TB, 2ndeng_TB, 3rdeng_TB,
4theng_TB他们都排成一排。这些数字将在特定的列上单独求解。现在,我需要知道如何在有行的情况下获得1stAP_TB、2ndAP_TB、3rdAP_TB和4thAP_TB的平均值。
此外,还有多个数据将保存在数据库中。我使用的是C#编程语言。
发布于 2016-01-18 11:43:26
尝试下面的方法
create table aveexample
(a1stAP_TB int,
a2ndAP_TB int,
a3rdAP_TB int,
a4thAP_TB int,
a1steng_TB int,
a2ndeng_TB int,
a3rdeng_TB int,
a4theng_TB int
)样本数据
insert into aveexample values(1,2,3,4,5,6,7,8)
insert into aveexample values(11,22,33,44,55,66,77,78)
insert into aveexample values(2,3,1,4,10,10,45,5)方法1
select *, (select AVG(totaldata)
from (values(a1stAP_TB),
(a2ndAP_TB),(a3rdAP_TB),(a4thAP_TB),(a1steng_TB),
(a2ndeng_TB),(a3rdeng_TB),(a4theng_TB)) total(totaldata))as average
from aveexample方法2
select ((a1stAP_TB)+
(a2ndAP_TB)+(a3rdAP_TB)+(a4thAP_TB)+(a1steng_TB)+
(a2ndeng_TB)+(a3rdeng_TB)+(a4theng_TB))/8 as Average
from aveexample发布于 2016-01-18 21:31:27
考虑到问题中非常有限的描述,很难给出具体的建议,但从目前为止的描述和评论来看,在我看来,数据库似乎需要重新设计,以更好地满足您的需求。首先,您没有ID字段,因此无法区分一行和下一行。然后,剩下的就是一系列重复的值。这里的线索是列名中有“1”、“2”、“3”。这可能表示需要将这些列移动到相关表的行中。这看起来可能不是最好的方法,但它被称为"First Normal Form“,是SQL数据库的典型最佳实践。另请参见Database Normalization Basics。
在我看来,你在这里拥有的是一些实体(你在问题中没有提到),它有许多与之相关的值。这里的“实体”应该被赋予一个唯一的ID,然后将该实体的所有值与其ID一起存储。
您可能有一个包含以下列的表:
CREATE TABLE MyItems (
ID int NOT NULL,
Sequence int NOT NULL,
Value int NOT NULL,
CONSTRAINT PK_MyValues_ID_Sequence PRIMARY KEY
(ID,Sequence)
)注意:ID + sequence形成了表的唯一主键,并使每一行都是唯一的。这还可以让您跟踪项目的添加顺序。这可能对您很重要,也可能不重要,但是每个表可能都应该有一个惟一的主键。
您的数据表将如下所示(该示例表示两个不同的实体,第一个实体有4个值,第二个实体有3个值):

如果不更多地了解应用程序及其功能,就很难展示一个合理的示例。但是有了这个表设计,您就有了一次添加一个值的基础,正如您所说的那样,并有了一种查询它们的方法。您可以使用分组来生成总计和平均值之类的内容,也可以在代码中通过迭代查询结果或在LINQ语句中执行此操作。
然后,您可以使用LINQ查询计算具有给定ID的实体的平均值,如下所示:
var average = MyItems.Where(p=>p.ID == 1).Average(q=>q.Value); 作为这种方法灵活性的一个示例,您可以很容易地计算整个数据库中输入的每一秒值的平均值:
var averageOfSecondItems = MyItems.Where(p => p.Sequence == 2).Average(q => q.Value);我展示的示例涉及一种类型的值。在你的问题中,你可能有两种不同类型的值。有几种方法可以处理这个问题-例如,如果值总是成对输入,则可以向表中添加另一列,或者可以创建第二个表来保存单独的值。同样,很难根据给出的有限信息做出推荐。
如果将数据放入第一范式看起来是一项繁重的工作,那么您的应用程序可能更适合文档数据库("NoSQL“数据库),但这实际上是另一个问题。在这个问题中,指定了一个SQL数据库,所以我集中讨论了这一点。
https://stackoverflow.com/questions/34840506
复制相似问题