2016-01-17 85 views
0

我有一个带有表的sql server数据库。这些是在ROWS中获得平均值c#

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#编程语言。

+0

请编辑您的问题,并提供样本数据和预期结果。 –

+0

@GordonLinoff我没有任何样本,因为我不知道如何去做。输出将被保存在数据库中。输出将被保存在文本框内。以上数据将在ROWS中。不是专栏。 – user5801889

+0

你的问题是有点混乱,你可以详细说明 –

回答

0

尝试下面方法

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 
+0

我需要先一次保存1个数字。所以我需要保存4次,才能获得平均值。我没有申报任何号码。 – user5801889

+0

我没有得到你,请告诉我你的目标 –

+0

例如,我将输入第一个数字2然后保存在数据库内,然后数字3然后保存在数据库内,然后5并将其保存在数据库中。然后将其保存在数据库中。他们在不同的列。所以我想得到平均水平。数字没有给出,它可能是任何东西。 – user5801889

0

由于问题描述非常有限,所以很难给出具体的建议,但从目前的描述和评论来看,我认为数据库需要重新设计以更好地满足您的要求。首先,你没有ID字段,所以没有办法区分一行和下一行。那么,你留下的是一系列重复的价值。这里的线索是你在列名中有“1st”,“2nd”,“3rd”。这可能意味着这些列需要移动到相关表格的行中。它似乎并不是最好的方法,但这被称为“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个值):

Sample Data

这是很难表现出一个合理的例子而不了解应用程序及其功能的更多信息......但通过此表设计,您可以根据需要添加一个值,并根据需要查询返回值。您可以使用分组来生成总计和平均值之类的东西,也可以通过遍历查询结果或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数据库,所以我专注于此。