0

我有一張表。SQL - 爲同一表獲取行

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 

例如:凱利的平均3.5來自尼科爾給2和Julia給了5和平均爲3.5。作爲同尼科爾得到平均2.5,因爲凱利給2和朱莉給了3

所以我怎麼能得到從一個SQL statment

平均科拉姆欣賞你的答案

感謝

+0

'尼科爾得到平均2.5因爲凱利給了2和朱莉給了3,'不明白? – 2015-03-25 12:20:38

+0

我需要得到平均值。這意味着2 + 3/2 = 2.5,希望你的耳朵 – 2015-03-25 12:23:45

回答

1

我會說,你想要的是這一點,但你應該考慮歸一點點是TABL E在爲了能夠做到這類型的查詢更容易:

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,名稱) 集團(GroupId的)因爲這將更好的表結構 GroupMember(成員Id,GroupId的) 資格(ProvidingMemberId,ReceivingMemberId,值)

或者類似

1

如果我理解是正確的,那麼它應該工作:

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

嗨迪帕克,謝謝你的回覆。這是調查數據。所以凱利得到了尼科爾和朱莉的評論。 根據你的SQL,我只能得到我給我的成員的平均值。但在這裏,我需要從我們的會員那裏獲得平均價值? 我希望你很清楚。 – 2015-03-25 12:19:31

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;