我有一个Netezza查询,我在一系列案例陈述中引用了几个日期。每次我想在开头声明一个变量并在整个查询中使用它时,而不是替换所有这些日期。在SAS中我会这样做:
%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 :(得分:4)
不幸的是,Netezza中没有程序SQL扩展允许您将这样的变量用作SQL语言本身的一部分。纯粹的SQL解决方案将涉及kludges,例如加入返回该值的CTE。但是,NZSQL CLI确实允许使用会话变量,就像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会在看到$ var_name时自动提示输入值,但是至少据我所知,没有硬编码该变量定义的功能。