SQL - 获取同一个表的行

时间:2015-03-25 12:08:29

标签: sql sql-server database stored-procedures sql-server-2008-r2

我有一张桌子。

select * from Group
Owner    Member1   Member1_Value    Member2  Member2_Value
Kelly    Nicol         2             Julie       4
Nicol    Julie         4             Kelly       3
Julie    Kelly         5             Nicol       3

现在我需要从我们的会员中获取Avege值。

Owner    Member1   Member1_Value    Member2  Member2_Value    Avg
Kelly    Nicol         2             Julie       5            3.5
Nicol    Julie         4             Kelly       2            2.5
Julie    Kelly         5             Nicol       3            4.5

例如:Kelly的Avg 3.5来自Nicol,2分,Julia分数为5分,Avg分数为3.5分。和尼科尔一样得到平均2.5,因为凯利给了2分,而朱莉给了3分。

那么如何从一个sql语句中获取Avg colum

感谢您的回答

由于

3 个答案:

答案 0 :(得分:1)

如果我理解正确,那么它应该有效:

select *, cast((Member1_Value + Member2_Value) as Decimal(10,2))/2 [Avg] from Group

答案 1 :(得分:1)

我想说你想要的是这个,但是你应该考虑对该表进行规范化,以便能够更容易地进行这类查询:

SELECT
   Name, AVG(Value) AS Value
FROM
(
    SELECT
       Member1 AS Name,
       Member1_Value As Value
    FROM Group
    UNION ALL
    SELECT
       Member2 AS Name,
       Member2_Value As Value
    FROM Group
 ) Normalised
 GROUP BY Name

通过

更好的表结构

会员(MemberId,姓名) 集团(的GroupId) GroupMember(MemberId,GroupId) 资格(ProvideMemberId,ReceivingMemberId,Value)

或类似的东西

答案 2 :(得分:1)

这似乎是一个非常复杂的数据结构。通常,拥有member1member2等列是数据库设计不佳的标志。你应该真正规范化表格。

您似乎希望其他成员的贡献来自表中的匹配行。我认为以下是您想要的:

select g.owner, (gm1.member2_value + gm2.member1_value) / 2.0
from group g join
     group gm1
     on g.owner = gm1.member1 join
     group gm2
     on g.owner = gm2.member2;