2013-03-04 4 views
1

У меня есть формула, что мне нужно, чтобы быть в состоянии поместить в мой SSIS Derived Column ... Ниже есть ..SQL SSIS формула Derived Column/синтаксис выдает

if MONTH(Sls.SlsDt) + DAY(Sls.SlsDt) > MONTH(TODAY) + DAY(TODAY) then 
    dYdtYr = 0. 
    else 
    dYdtYr = YEAR(Sls.SlsDt). 

Как бы я поставил выше бизнес логики в преобразование производных столбцов SQL SSIS ETL?

Is Derived Column - правильный вариант для этого?

Пакет ETL представляет собой импорт из CSV в таблицу промежуточного SQL-кода, во время этого импорта мне нужно вывести новый столбец (или заменить существующий), который имеет реализованную выше логику.

Вводные строки содержат столбцы MONTH и DAY и dYdtYr. В некотором смысле мне нужно было бы переопределить значение dYdtYr новым значением, основанным на вышеуказанной логике.

+0

В качестве альтернативы, если SSIS слишком ограничен, я могу выполнить TSQL SP, который смотрит на промежуточную таблицу и обрабатывает вышеуказанную логику ... Затем я добавлю в свой SSIS ETL шаг для выполнения SP. – exxoid

+0

Вы пытаетесь сказать, что если месяц продажи и дата (отформатированная как 1225) больше сегодняшней даты (0304), тогда установите dYtdYr = 0 else set dYtdYr = Sales Year? Будет ли это работать? –

+0

Функции T-SQL 'MONTH' и' DAY' возвращают целые числа. Вы действительно хотели добавить эти два номера вместе, или это действительно попытка сравнить две даты? –

ответ

0

Если вы можете использовать TSQL, то вы можете использовать CASE Заявление о

CASE 
WHEN MONTH(Sls.SlsDt) + DAY(Sls.SlsDt) > MONTH(getDate()) + DAY(getDate()) 
THEN dYdtYr = 0 
ELSE 
dYdtYr = YEAR(Sls.SlsDt) 
END AS ColumnName 
+0

Это не сработает, если вы добавите месяц ('2013-03-04') 3 и день ('2013-03-04') 4, вы получите 7, что не полезно в любой процедуре сравнения дат. –

+0

@WilliamToddSalzman - это точный синтаксис из его вопроса. Он не сравнивает даты. у вас было бы 6> 7, если вчера была дата «SlsDt», которая является вполне допустимым сравнением. –

+0

Я, возможно, читаю его вопрос, чтобы попытаться определить, чего он хочет, а не то, что он написал. Нам нужно будет увидеть, что он пытается сделать, чтобы выяснить, кто из нас прав. Извините, если я подпрыгнул до выводов. –

2

Производный столбец установлен как заменить столбец иметь его заменить dYtdYr. Вставьте следующий в выражение:

(MONTH(Sls.SlsDt) * 100 + DAY(Sls.SlsDT) > MONTH(getdate())*100 + DAY(getdate())) ? 0 : YEAR(Sls.SlsDt) 

Это принимает значение месяца (03 для марша) умножает его на 100, чтобы получить 300 и добавляет его к значению дня (04 на сегодняшний день) и yeilds значения как 0304. Это будет работать так, чтобы любой день года, предшествующий или равный этому значению, был меньше этого числа, и любой день года после этого будет больше. Обратите внимание, что это не учитывает годы. Это означает, что 31 декабря с 3 лет назад получилось бы 0 в dYtdYr, но 3 марта с 3 лет назад (сегодня) получит год для SlsDt для него. Я бы предположил, что если это ваш желаемый результат, вы пытаетесь построить сравнение за год по сравнению с предыдущим годом.

+0

Good catch @Siva Я помню механизм выражения SSRS, где TODAY действителен и означает то же, что и getdate() –

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