2011-04-12 2 views
1

J'ai une table où je veux appliquer certaines fonctions d'agrégation ayant comme critères le regroupement de l'élément spécifique de la colonne spécifique. Supposons que l'exemple ci-dessous:PLSQL-Définition paramétrique de fonction de groupe

TIMESTAMP SITE VALUE 

10:00   A 100 
10:00   B 50 
10:00   C 25 
10:00   D 25 
10:05   A 25 
10:05   B 15 
10:05   C 5 
10:05   D 10 

je veux trouver le groupe de valeur moyenne par SITE, TIMESTAMP mais le site A, B je veux qu'il soit estimé comme l'un, ce qui signifie que je voulais REPLACE B WITH A avoir et trouver ensuite les moyenne:

TIMESTAMP SITE VALUE 
10:00   A 75 
10:00   A 75 
10:00   C 25 
10:00   D 25 
10:05   A 20 
10:05   A 20 
10:05   C 5 
10:05   D 10 

la première consiste à mettre à jour la table mise B=A, mais ce n'est pas une telle solution sophistiquée si je veux à l'avenir groupe plus SITES

Répondre

2

Vous n'avez pas besoin de mettre à jour la table.

SELECT CASE site WHEN 'B' THEN 'A' ELSE site END as site 
     ,timestamp 
     ,AVG(value) 
FROM sites 
GROUP BY CASE site WHEN 'B' THEN 'A' ELSE site END 
     ,timestamp 
; 
0

Vous peuvent trouver les moyennes de sites et combinés séparément non combinés, puis l'union les togeather, comme celui-ci -

SELECT timestamp, site, AVG(value) FROM 
(
    -- uncombined 
    SELECT timestamp, site, value FROM TABLE WHERE site NOT IN ('A', 'B') 

    UNION ALL 

    -- combined A, B 
    SELECT timestamp, 'AB' site, AVG(value) val 
    FROM TABLE 
    GROUP BY timestamp 
    WHERE site IN ('A', 'B') 
) U 
GROUP BY timestamp, site 

Juste une idée, pas testé le sql

Questions connexes