我想在Aginity Netezza宏中放置一个名称列表。例如,我希望能够在以后的查询中重复使用该列表(“亚当”,“比尔”,“辛西娅”,“迪克”,“埃拉”,“范妮”)。在WHERE子句中。
我的问题是: (1)在查询参数编辑器的“值”窗口中可以放入多少个字符有限制吗? (2)有没有一种方法可以在不使用宏的情况下进行这项工作?例如,在某处预定义此列表?
答案 0 :(得分:0)
我会将列表放入(临时)表中,并在必要时简单地加入该列表:
Create temp table names as
Select ‘Adam’::varchar(50)
Union all Select ‘Bill’::varchar(50)
Union all Select ‘Cynthia’::varchar(50)
Union all Select ‘Dick’::varchar(50)
Union all Select ‘Ella’::varchar(50)
Union all Select ‘Fanny’
;
Select x.a,x.b
from x
where x.name in (select * from Names)
;
Select
case
when x.name in (select * from Names)
then ‘Special’
Else ‘Other’
End as NameGrp,
Count(*) as size,
Sum(income) as TotalIncome
Group by NameGrp
Order by size desc
;
或者,netezza有一个扩展工具包,该工具包支持ARRAY数据类型,但是特别是如果您将第一个查询用于此目的,它的性能将不佳。有兴趣吗参见此处:https://www.ibm.com/support/knowledgecenter/en/SSULQD_7.2.1/com.ibm.nz.sqltk.doc/c_sqlext_array.html或google以获取示例