2010-06-24 2 views
0

J'essaye de créer la vue suivante, et j'obtiens l'erreur ci-dessous: Je suis capable de faire l'instruction de 1 compte (si je retire l'AS "Mod0") Est -il possible de compter plusieurs sous-chaînes, avec le compte de sortie à une nouvelle colonne?compte multiple (sous-chaîne) avec windowing psql 8.4.4

create view portcnt as 
    select 
    address, 
    datacenter, 
    ifdesc, 
    count(substring(ifdesc, 'Ethernet0/*')) as "Mod0", 
    count(substring(ifdesc, 'Ethernet1/*')) as "Mod1", 
    count(substring(ifdesc, 'Ethernet2/*')) as "Mod2", 
    count(substring(ifdesc, 'Ethernet3/*')) as "Mod3", 
    count(substring(ifdesc, 'Ethernet4/*')) as "Mod4", 
    count(substring(ifdesc, 'Ethernet5/*')) as "Mod5", 
    count(substring(ifdesc, 'Ethernet6/*')) as "Mod6" 
    over (partition by address) 
    from ifstatus where datacenter = 'DC' 
    and ifadminstatus = '1' and ifoperstatus = '1'; 
ERROR: syntax error at or near "by" 
LINE 13: over (partition by address) 
+0

Pouvez-vous fournir quelques exemples de données (avec des adresses fausses)? Je ne sais pas pourquoi vous avez besoin de la fenêtre - est-ce qu'un groupe travaillerait? – AngerClown

Répondre

1

trouvé une solution qui a fonctionné:

create view portcnt1 as 
    select 
    address, 
    datacenter, 
    ifdesc, 
    count(substring(ifdesc, 'Ethernet0/*')) 
    over (partition by address) mod0, 
    count(substring(ifdesc, 'Ethernet1/*')) 
    over (partition by address) mod1, 
    count(substring(ifdesc, 'Ethernet2/*')) 
    over (partition by address) mod2, 
    count(substring(ifdesc, 'Ethernet3/*')) 
    over (partition by address) mod3, 
    count(substring(ifdesc, 'Ethernet4/*')) 
    over (partition by address) mod4, 
    count(substring(ifdesc, 'Ethernet5/*')) 
    over (partition by address) mod5, 
    count(substring(ifdesc, 'Ethernet6/*')) 
    over (partition by address) mod6, 
    count(substring(ifdesc, 'Ethernet7/*')) 
    over (partition by address) mod7, 
    count(substring(ifdesc, 'Ethernet8/*')) 
    over (partition by address) mod8, 
    count(substring(ifdesc, 'Ethernet9/*')) 
    over (partition by address) mod9 
    from ifstatus 
    where ifadminstatus = '1' and ifoperstatus = '1';