2014-11-10 2 views
0

У меня есть таблица, в которой есть куча компаний, перечисленных в ней. Мне нужно сделать словарь, который объединяет некоторые данные компании и, кроме того, каждый месяц за последние 3 года до текущего месяца. Так, например, я бы потянул cmp_num, а затем добавил дополнительные столбцы в течение года и месяца. Важно, чтобы фактические годы не были жестко закодированы, так как я хотел бы, чтобы это продолжало работать в последующие годы.Месяц & вид компании

cmp1, 2014, 11 
cmp1, 2014, 10 
cmp1, 2014, 09 
...etc for all months of 2014 
cmp1, 2013, 01 
...etc for all months of 2013 
cmp1, 2014 
...etc for all months of 2012 
*and so on for all companies 

Нужен ли мне семенной стол с годами и месяцами? Или есть способ создать это «на лету» с расчетным представлением? Какой подход был бы лучше в tsql? Вот список вещей, которые мне нужно объединить с годом \ месяц.

[cmp_code] 
[Name] 
[City] 
[State] 
[GroupNo] 
[lastname] 
+0

Вы можете делать в любом случае. Зависит от ваших предпочтений. Вы можете генерировать список на лету, используя рекурсивный CTE. Я бы попробовал это первым и посмотрел, нормально ли работает. Если нет, вы можете создать специальную таблицу, которая, конечно же, должна поддерживаться. – TomT

+0

Знаете ли вы, как создать этот кот? Мне нужна помощь в этом. – d90

ответ

1

Как я уже сказал, вы можете сделать оба. Вот CTE, который вы можете использовать для создания списка в течение 3 лет назад. Если производительность недостаточно, вам следует рассмотреть возможность создания выделенной таблицы.

WITH cte AS 
(
    SELECT 1 AS id, DATEPART(YEAR,GETDATE()) AS [year], DATEPART(MONTH,GETDATE()) AS [month] 

    UNION ALL 

    SELECT 
    id + 1 AS id, 
    CASE WHEN [month] = 1 THEN [year]-1 ELSE [year] END AS [year], 
    CASE WHEN [month] = 1 THEN 12 ELSE [month] - 1 END AS [month] 
    FROM cte WHERE id < 36 
) 
SELECT [Name], [year], [month] 
FROM cte CROSS JOIN dbo.viewFranchiseList 
+0

ОК. Теперь, как я могу присоединиться к этой таблице, содержащей данные компании в этом запросе? – d90

+0

Я добавил дополнительную информацию, которую мой OP отсутствовал. Это значения из другого представления. Мне нужно добавить данные года и месяца. – d90

+0

Я в замешательстве. Вы спрашиваете, как присоединиться к ней к столу компаний? это ваш вопрос? – TomT