2015-01-05 5 views
3

У меня есть запрос Netezza, где я ссылаюсь на пару дат в серии операторов case. Вместо того, чтобы заменять все эти даты каждый раз, когда я хотел бы объявить переменную в начале и использовать ее во время запроса. В SAS я хотел бы сделать это следующим образом:Как объявить переменную в Netezza?

%LET end_p = '31DEC2014'd; 

proc sql; 
create table want as 
select distinct id, 

sum(case when (INCUR_DT) >= (&end_p-30) 
    and ip_op_cd = 'IP' 
    then net_allow_at else 0 end) as ip_d_30, 

sum(case when (INCUR_DT) >= (&end_p-90) 
    and ip_op_cd = 'IP' 
    then net_allow_at else 0 end) as ip_d_90, 

sum(case when (INCUR_DT) >= (&end_p-180)  
    and ip_op_cd = 'IP' 
    then net_allow_at else 0 end) as ip_d_180, 
... 
+0

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

ответ

3

К сожалению, нет никаких процедурных расширений SQL в Netezza, которые позволяют использовать такие переменные, как это как часть самого языка SQL. Чисто SQL-решения будут включать клопы, такие как присоединение к CTE, возвращающее одно значение. Однако CLI NZSQL позволяет использовать переменные сеанса, как и Aginity Workbench.

Пример использования NZSQL. Обратите внимание на выход внутренних одинарных кавычек, чтобы использовать переменную как литерал.

TESTDB.ADMIN(ADMIN)=> \set TVAR '\'foo\'' 
TESTDB.ADMIN(ADMIN)=> select :TVAR; 
?COLUMN? 
---------- 
foo 
(1 row) 
TESTDB.ADMIN(ADMIN)=> create table test_table (col1 bigint); 
CREATE TABLE 
TESTDB.ADMIN(ADMIN)=> insert into test_table values (123); 
INSERT 0 1 
TESTDB.ADMIN(ADMIN)=> \set TCOL 'COL1' 
TESTDB.ADMIN(ADMIN)=> select :TCOL from test_table; 
COL1 
------ 
    123 
(1 row) 

Aginity будет автоматически запрашивать значения, когда это видит $ имя_переменного, но нет функциональности жесткого кода, определения переменного, по крайней мере, насколько я знаю.

+0

Спасибо. Думаю, я буду использовать SAS и сквозные проходы ... – ADJ

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