2012-03-23 60 views
1

我需要創建一個存儲過程 - 但我對它們的知識非常有限。存儲過程:循環與數學

基本上它會從現有表導入數據,處理這些數據,然後創建一個新表。

最好的方法是什麼?

有幾個不同的計數器,並根據另一個值將值添加到這些計數器;

如:

house_name | person_name 
------------+------------ 
bighouse | sam 
bighouse | sammy 
bighouse | joe 
smlhouse | brad 
smlhouse | kev 

即。在這個例子中,計數器的值爲3和2(bighouse中有3個人,smlhouse中有2個)(在我的實際工作中,這兩個都是'int',所以在那裏沒有問題)。

我被告知要使用光標,但我很難知道如何使用它!

任何幫助表示讚賞。

+0

當我聽到'計數器'時,我傾向於使用SUM,COUNT和ROW_NUMBER函數而不是遊標。假設上面的例子是你導入的表格,你期望的新表格包含什麼內容?當然不僅僅是「bighouse 3 smlhouse 2」? – MartW 2012-03-23 09:44:17

回答

0

你的問題讓人感到模糊的我,但我可以給你的代碼爲非常具體的例子。

INSERT INTO 
    yourResultsTable 
SELECT 
    house_name, 
    COUNT(*)  AS people_per_house 
FROM 
    yourDataTable 
GROUP BY 
    house_name 

這可避免使用遊標。 SQL是一個基於集合的語言,儘管T-SQL可以實現循環,但在絕大多數情況下,您會發現性能要差得多。

如果您有其他複雜的計數器,我們也可以幫助您,但我們需要了解輸入數據的結構,對該數據的任何約束,輸出數據的結構和約束,以及示例兩者相互關聯。

3

通常情況下,您不會將「派生」信息存儲在數據庫中。它總是帶來不一致的風險。

通常的方法是添加一個觀點:

create view house_stats 
as 
select house_name 
,  count(*) as number_of_people 
from YourTable 
group by 
     house_name 

您可以使用視圖的查詢,因爲它是一個表。因爲它實際上是一個存儲計算,所以不存在不一致的風險。