2017-03-23 1 views
-1

J'ai créé une vue comportant 4 colonnes. Il ressemble à quelque chose comme ceciAffichage et diffusion de texte

status   |  name  |  faculty  | starting 
Garbage value | James Donald | XYZ    | 2001-01-01 
"     Ross Harley  ABC     2013-04-04  

Il a plus de valeurs, mais ce n'est pas un problème. J'ai besoin de remplacer la valeur de la poubelle par le statut "Plus long service" ou "Servir le plus court", mais je ne peux pas le faire.

La réponse devrait ressembler à quelque chose comme

status | name | faculty | starting Longest Serving | James Donald | XYZ | 2001-01-01 Shortest Serving | Ross Harley | ABC | 2013-04-04

Ma requête initiale pour créer le q3 de vue est le suivant:

create or replace view q3 (status, name, faculty, starting) as 
select max(q.starting) as status, q.name, q.faculty, q.starting 
from q2 q 
where (starting in (select min(starting) from q2)) 
    or (starting in (select Max(starting) from q2)) 
group by q.name, q.faculty, q.starting; 

max (q.starting) comme stats est la poubelle.

The 2 views involved
Ce qu'il fait est essentiellement de savoir qui a servi le plus long et le plus court en fonction de la colonne de départ. (données dans la vue q2) et remplacez le statut par la plus longue portion ou la plus courte portion.

Si vous pouviez comprendre le problème et connaître la solution, cela m'aiderait beaucoup. Merci.

+0

Quelle dbms utilisez-vous? – jarlh

+0

psql dans PostgreSQL –

+0

Pouvez-vous ajouter d'autres données d'échantillon et aussi le résultat attendu? – jarlh

Répondre

0

L'adaptation suivante à votre requête devrait fonctionner:

create or replace view q3 (status, name, faculty, starting) as 
select 
    CASE 
    WHEN starting in (select min(starting) from q2 THEN 'longest serving' 
    ELSE 'shortest serving' 
    END 
    AS status, 
    q.name, q.faculty, q.starting 
from q2 q 
where (starting in (select min(starting) from q2)) 
    or (starting in (select Max(starting) from q2)) 
group by q.name, q.faculty, q.starting; 
+0

Merci beaucoup. Ça marche! –