SQL - 获取相同 table 的行

SQL - get row for same table

我有一个table。

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

现在我需要从我们的会员那里获得所有者的平均价值。

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。和 Nicol 一样平均分 2.5 因为 Kelly 给了 2 而 Julie 给了 3.

那么我怎样才能从一个 sql 语句

中得到 Avg colum

感谢您的回答

谢谢

如果我理解正确,那么它应该可以工作:

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

我会说你想要的是这个,但你应该考虑稍微规范化 table 以便能够更轻松地执行此类查询:

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

一个更好的table结构将由

会员(会员编号,姓名) 组(GroupId) GroupMember(会员ID, GroupId) 资格(ProvidingMemberId,ReceivingMemberId,值)

或类似的东西

这似乎是一个非常复杂的数据结构。通常,像 member1member2 这样的列是数据库设计不佳的标志。你真的应该规范化 table.

您似乎希望 other 成员的贡献来自 table 中的匹配行。我认为以下内容可以满足您的需求:

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;