2016-07-21 4 views
-1
create table p(pid int, st int, v int,hid int,ht varchar(2)); 
data: 
insert into p(pid,st,hid, ht,v) 
select 1 ,20160131 ,100 ,'FO' ,10 
union select 1 ,20160131 ,101 ,'FO' ,20 
union select 1 ,20160131 ,102 ,'FO' ,30 
union select 1 ,20160131 ,103 ,'ST' ,40 
union select 1 ,20160229 ,104 ,'ST' ,50 
union select 207 ,20160229 ,301 ,'ST' ,80 
union select 207 ,20160229 ,302 ,'ST' ,20 
union select 207 ,20160331 ,303 ,'FO' ,40 
union select 102 ,20160229 ,205 ,'ST' ,60 
union select 102 ,20160229 ,206 ,'ST' ,20 
union select 102 ,20160229 ,207 ,'FO' ,20 
union select 100 ,20160131 ,201 ,'ST' ,50 
union select 100 ,20160131 ,202 ,'ST' ,50 
union select 101 ,20151231 ,203 ,'ST' ,50 
union select 101 ,20151231 ,204 ,'ST' ,50 


result: 
pid v hid ht path pre_st next_st st 
1 40 103 ST 1 NULL NULL 20160131 
100 50 201 ST 1--->100 NULL NULL 20160131 
100 50 202 ST 1--->100 NULL NULL 20160131 
101 50 203 ST 1--->101 20151231 NULL 20160131 
101 50 204 ST 1--->101 20151231 NULL 20160131 
102 20 206 ST 1--->102 NULL 20160229 20160131 
102 60 205 ST 1--->102 NULL 20160229 20160131 
207 20 302 ST 1--->102--->207 NULL 20160331 20160229 
207 80 301 ST 1--->102--->207 NULL 20160331 20160229 
303 99 304 ST 1--->102--->207--->303 NULL 20160720 20160331 


I can do it in SQLServer first. 
select pid,v,hid,ht, path=cast(pid as varchar) , 
(select max(st) from p where pid = a.pid and st < a.st) as pre_st, 
(select max(st) from p where pid = a.pid and st > a.st) as next_st, 
a.st into #t1 
from p a where pid=? and st=? 
but netezza cannot support this grammer. 

Ich muss nach pid, st als Parameter, um es zu tun. Nehmen wir pid = 1 und st = 20160131 an, speichere ich den Parametersatz in einer Tabelle. Tabelle erstellen i (pid int, st int) einfügen in i (pid, st) Wählen Sie 1,20160131 Wie wird das obige Ergebnis wahr?netezza sql, wie wird man wahr?

Antwort

0

Wenn Sie nur eine temporäre Tabelle zu erstellen suchen (das Äquivalent von SQL Server-Syntax), dann ist es dies:

create temporary table t1 as 
select pid,v,hid,ht, path=cast(pid as varchar) , 
(select max(st) from p where pid = a.pid and st < a.st) as pre_st, 
(select max(st) from p where pid = a.pid and st > a.st) as next_st, 
a.st 
from p a where pid=? and st=? 

Ich gehe davon aus, dass die ? Werte, die Sie haben, gibt es weil Sie ODBC-Parameter verwenden. Wenn Sie versuchen, Netezza dazu zu bringen, Sie nach etwas zu fragen, you can't.

Verwandte Themen