【问题标题】:SQL - get row for same tableSQL - 获取同一张表的行
【发布时间】:2015-05-29 02:22:58
【问题描述】:

我有一张桌子。

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

现在我需要从我们的 Members for Owners 那里获得平均价值。

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 列

感谢您的回答

谢谢

【问题讨论】:

  • Nicol got Avg 2.5 because Kelly gave 2 and Julie gave 3.,看不懂??
  • 我需要取平均值。意思是 2+3/2 = 2.5,希望你明白

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


【解决方案1】:

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

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

【讨论】:

  • 嘿迪帕克,感谢您的回复。这是调查数据。所以凯利得到了尼科尔和朱莉的评论。根据您的 sql,我只能得到我给会员的平均值。但是在这里我需要从我们的会员那里得到平均值?我希望你清楚。
【解决方案2】:

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

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

一个更好的表结构将由

会员(会员ID,姓名) 组(组 ID) 组成员(成员 ID,组 ID) 资格(ProvidingMemberId、ReceivingMemberId、Value)

或类似的东西

【讨论】:

    【解决方案3】:

    这似乎是一个非常复杂的数据结构。通常,具有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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多