2012-05-02 53 views
1

叫我的表可以說「表1」看起來如下:MS SQL訪問,總結了幾個字段和比較值

區|所有者| Numberid |平均值

1200 | Fed_G | 998 | 1400

1220 | Priv | 1001 | 1600

1220 | Local_G | 1001 | 1430

1220 | Prov_G | 1001 | 1560

1220 | Priv | 1674 | 1845

1450 | Prov_G | 1874 | 1982

理想情況下,我想要做的是在平均數列中總結幾行,如果: 1.他們有相同的numberid(可以說三行都有numberid = 1000,那麼他們將他們的平均值加起來) 2.Area = 1220

然後將其添加到現有表中,同時將Owner字段設置爲「ALL」。

我剛開始進入工作,所以我真的不知道如何做到這一點,這是我可怕的嘗試:

SELECT ind.Area, ind.Owner, ind.numberid, 
(SELECT SUM([Average]) FROM [table1] 
WHERE [numberid]=ind.numberid) AS Average 
FROM [table1] AS ind 
WHERE (((ind.numberid)>="1000" And (ind.numberid)<"10000") AND ((ind.Area)="1220")) 

任何人都可以指導我,我應該怎麼辦呢?我不習慣sql語法。

我試圖用「ind」作爲變量來比較。

到目前爲止,它給了我列名但沒有輸出。

+0

Atleast你試過了!乾杯。 – rvphx

+0

@HansUp添加了示例數據並給出了輸出的描述。謝謝! – BadgerBeaz

+1

你可以添加你想要的輸出以及你的表格結構。也是「區域」和「數字ID」文本或整數? – GarethD

回答

2

我仍然不能確定自己是否明白你想要什麼。因此,我會爲您提供此查詢,並讓您告訴我們結果是您想要的結果還是與您想要的結果不同。

SELECT 
    t.Area, 
    'ALL' AS Owner, 
    t.Numberid, 
    Sum(t.Average) AS SumOfAverage 
FROM table1 AS t 
GROUP BY t.Area, 'ALL', t.Numberid; 

使用您的示例數據,該查詢給了我這個結果集。

Area Owner Numberid SumOfAverage 
1200 ALL  998   1400 
1220 ALL  1001   4590 
1220 ALL  1674   1845 
1450 ALL  1874   1982 
1

也許我可以(也許)給你一個更好的答案,如果你改善你的問題的措辭。

但是,您需要選擇average列和group bynumberidArea列。因爲主人場<>我想這並不在此查詢,我正在寫事:

SELECT numberid, area, SUM(average) 
FROM table1 
WHERE owner = 'your-desired-owner-equal-to-all' 
GROUP BY numberid, area 
ORDER BY numberid, area 
+0

對不起,讓我知道我解釋錯了什麼。感謝你目前的幫助! – BadgerBeaz

+0

@fonzy不客氣。您可以在您的問題中添加一些示例數據,並根據示例數據告訴我們查詢的結果。 –

+0

我試圖給問題添加更多信息,當我運行我的查詢時,我得到列名但表中沒有信息。謝謝。 – BadgerBeaz