2017-03-23 5 views
-1

4つの列を持つビューを作成しました。それはこのようなものです。ビューとキャストへのテキスト

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

これはもっと価値がありますが、それは心配ありません。 ステータスのガベージ値を「最長のサービング」または「最短のサービング」のテキストに置き換える必要がありますが、そうすることはできません。

答えは、ビューQ3を作成するための私の最初のクエリがある

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

次のようになります。統計情報として

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; 

最大(q.starting)ごみです。

The 2 views involved
それは何やっていることは、本質的に、最長と最短の列の開始に基づくを務めた人を見つけることです。 (ビューq2のデータ)、ステータスを最長提供または最短提供のいずれかに置き換えます。

問題を理解して解決策を知ることができれば、大きな助けになります。ありがとう。

+0

使用しているDBMS? – jarlh

+0

PostgreSQLのpsql –

+0

サンプルデータと期待される結果を追加できますか? – jarlh

答えて

0

クエリを次のように適応作業をする必要があります:

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

ありがとうございました。できます! –

関連する問題