2012-03-23 4 views
1

Мне нужно создать хранимую процедуру - я имею очень ограниченное знание о них.Сохраненный Proc: Loop с математикой

В основном он будет импортировать данные из существующей таблицы, обрабатывать эти данные, а затем создавать новую таблицу.

Каков наилучший способ для этого?

Существует несколько разных счетчиков, и значения добавляются к этим счетчикам в соответствии с другим значением;

например:

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

т.е.. в этом примере счетчики будут иметь значения 3 и 2 (3 человека в bighouse, 2 в smlhouse) (в моей реальной работе оба являются «int», поэтому проблем нет).

Мне сказали использовать Курсор, но мне трудно понять, как его использовать!

Любая помощь приветствуется.

+0

Когда я слышу «счетчики», я предпочитаю функции SUM, COUNT и ROW_NUMBER, а не курсоры. Предполагая, что приведенный выше пример - ваша импортированная таблица, в чем будет содержаться ваша ожидаемая новая таблица? Неужели больше, чем просто «bighouse 3 smlhouse 2»? – MartW

ответ

0

Ваш вопрос чувствует расплывчато для меня, но я могу дать вам код для этого очень конкретный пример.

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

Это позволяет избежать использования курсоров. SQL - это набор lanaguage, основанный на наборе, и хотя T-SQL может создавать циклы, вы обнаружите, что в подавляющем большинстве случаев превалирование намного хуже.

Если у вас есть другие счетчики, которые являются комплексными, мы также можем помочь с ними, но нам нужно знать структуру ваших входных данных, любые ограничения на эти данные, структуру и ограничения выходных данных и примеры из них связаны друг с другом.

3

Обычно вы не храните «производную» информацию в базе данных. Он всегда несет риск несоответствий.

Обычный подход можно было бы добавить вид:

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

Вы можете использовать представление в запросах, как ему это было стол. Поскольку это фактически хранимый расчет, нет никакого риска несоответствий.

Смежные вопросы