2010-10-13 3 views
1

Предположим, что я использую SQL-сервер для отслеживания всех моих личных расходов и что я помечен всем с датой и категорией.имена переменных столбцов в таблице sql function value

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

То, что я застрял, - это тот факт, что мне нужно называть колонки такими, как «последний месяц», «предыдущий месяц» и «2 месяца назад». Я бы предпочел называть их чем-то вроде «Jan10», «Feb10» или «Mar09» или что-то в этом роде и автоматически обновлять их каждый месяц.

Вычисление имен достаточно просто, но я не уверен, как заставить SQL-сервер интерпретировать формулу или присоединиться или что-то в этом роде как псевдоним для столбца.

Любые идеи по этому вопросу?

+0

Не забудьте предоставить пример кода такого сводного запроса? –

+1

без дополнительной информации и кода, я бы порекомендовал вытягивать их как строки вместо этого. – Fosco

+0

Модели данных должны быть статическими ... любое изменение имен таблиц/столбцов может иметь некоторые кастастрофические эффекты для любого существующего кода. Вы можете использовать выражения select для построения логики «последнего месяца» (вы присоединяетесь к таблице для себя, чтобы получить этот эффект). Если вам нужна помощь с инструкцией select для ее создания, попросите прочь ... но нам понадобится дополнительная информация о вашей (надеюсь, статической) схеме таблиц. – Twelfth

ответ

3

То, что я застрял, - это тот факт, что мне приходится называть такие столбцы, как «последний месяц», «предыдущий месяц» и «2 месяца назад». Я бы предпочел называть их чем-то вроде «Jan10», «Feb10» или «Mar09» или что-то в этом роде и автоматически обновлять их каждый месяц.

Этот подход означает создание нескольких столбцов, которые в конечном итоге достигнут предела. В SQL Server, that's 1,024 for a non-wide and 30,000 for a wide table ...

Лучшим подходом является сохранение даты и разделение/разделение данных в запросе по мере необходимости. Потому что 10 января будет иметь другое значение для 2009, 2010, 2011 и т. Д.

+0

Jan10 был действительно прозвищем в январе 2010 года. Я не должен был четко понимать тот факт, что запрос всегда будет возвращать одинаковое количество столбцов, я хочу, чтобы имена столбцов менялись со временем на основе текущей даты. –

+0

@Chuck Taylor: Имена столбцов являются статическими. Если Jan10 означает январь 2010 года, тогда вам нужно будет создать Jan11 в 2011 году ... Вы по-прежнему рискуете поразить лимит столбца в конце концов. Никакая модель данных не должна часто меняться, особенно для того, что может быть получено на основе существующих данных. –

1

Мне кажется, что вы пытаетесь хранить данные так же, как вы хотите их просматривать. Это не очень хороший способ обойти это. Я хотел бы предложить следующее:

Ваша таблица должна иметь основы, скажем:

Store (This could become its own table, but we can leave it as a string) 
Category 
Amount Spent 
Date 

Тогда, как только у вас есть эти данные, вы можете сообщить об этом. Этот отчет будет выполнять тяжелую работу и будет динамичным в том смысле, что вам не нужно жестко кодировать значения. Ниже приведен пример, и я не могу обещать, что синтаксис даже правильный.

SELECT Store, SUM(CASE WHEN Date > GETDATE() - 14 THEN AmountSpent ELSE 0 END) 
FROM YourTable 
GROUP BY Store 

Вышеупомянутые данные предоставят вам все деньги, потраченные в каждом магазине за последние 14 дней. Это окно будет «скользящим», каждый раз, когда вы его запускаете, он будет оглядываться на две недели; нет жесткого кодирования.

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