2015-09-23 2 views
0

У меня есть две таблицы базы данных: Spend и VendorSpend. Столбцы, используемые в таблице расходов, называются VendorID, VendorName, RecordDate, and Charges. Таблица VendorSpend содержит VendorID и VendorName, но с раздельными данными (one record for each unique VendorID). Мне нужен простой способ добавить столбец в таблицу VendorSpend с именем Aug2015, этот столбец будет содержать SUM of each Vendor's charges within that month time period. Она будет рассчитываться на основе этого запроса:Создание функции для добавления вычисленного столбца в таблицу в SQL Server на основе запроса

Select Sum(Charges) 
    from Spend 
    where RecordDate >= '2015-08-01' and RecordDate <= '2015-08-31' 

Имейте в виду, что это нужно будет вызываться каждый раз новые данные вставляются в таблицу Потратьте и таблицу VendorSpend необходимо обновить на основе новых данных. Это будет происходить каждый месяц, поэтому на самом деле нужно будет добавить новый столбец, и данные будут вычисляться каждый месяц.

Любая помощь очень ценится.

+1

Это звучит как дизайн очень плохой таблицы ... Если вы собираетесь сделать это, вы будете просить о помощи с PIVOT и UNPIVOT в течение нескольких недель ;-) Как существуют строки данных пользователя? Какую версию сервера sql вы используете? – Shnugo

+0

Таблицы действительно плохие, это в основном просто свалка очень большой таблицы, которую мы получаем каждый месяц. В настоящее время в таблице Spend имеется более 22 000 записей. SSMS 2014 –

ответ

0

Создание определяемой пользователем функции, которые вы передаете VendorID и дату, и который делает ваш SELECT:

Select Sum(Charges) 
    from Spend 
    where [email protected] 
AND DATEDIFF(month, RecordDate, @Date) = 0 

Теперь лично, я хотел бы остановиться прямо здесь и использовать функцию для выбора данных во время запроса , вместо добавления нового столбца в таблицу.

Но, рассматривая ваш вопрос как академический, вы можете создать вычисляемый столбец с именем [Aug2015] в VendorSpend, который передает [VendorID] и '08/01/2015 'этой функции, и он будет содержать желаемый результат.

+0

Я почти совершенно новый для SQL, но быстро подбираю его. Не могли бы вы представить синтаксис, как создать эту функцию и как ее вызвать, когда мне нужно создать новый столбец? –

+1

Пожалуйста, запустите функцию Google CREATE FUNCTION. Ответы на эти вопросы уже доступны в Интернете. –

+0

Я успешно создал функцию и вычисляет правильную сумму, но я все еще жестко кодирую VendorID и Date, когда я его вызываю. Мне нужно, чтобы он циклически изменял таблицу VendorSpend, смотрел на VendorID и вводил сумму сборов за каждый идентификатор поставщика в новом столбце. Мысли? –

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