2016-05-10 4 views
2

私は次のクエリへの解決策を考え出すしようとしています:(サブクエリのトピック)

最近雇われた従業員の前で(*)を表示し、日付を雇います。他のすべての従業員も表示されていることを確認してください。

私は上記のクエリを解決しようとしていますUNIONを使用せずに解決しようとしています。私は解決策に近づきましたが、はすべての行の前に星印(*)を表示します。ここに私の解決策は次のとおりです。

SELECT ENAME, HIREDATE, LPAD('*',2) 
FROM EMP 
WHERE HIREDATE = (SELECT MAX(HIREDATE) 
        FROM EMP) 
OR HIREDATE != (SELECT MAX(HIREDATE) 
       FROM EMP); 

私はLPAD('*', 2)を使用していたとき、私は何か間違ったことをやっているかなり確信しているだけでカントは、私が行方不明ですかを把握するように見えます。ここで

+2

どのプラットフォームを使用していますか、最近の定義はどうですか? – Hogan

+0

ホーガンに遅れて申し訳ありません。私のインターネットは機能していませんでした。私が使用しているプラ​​ットフォームはsqlplusです。 SCOTTスキーマのEMPテーブルによれば、最近採用された従業員はADAMSであり、彼の雇用者は23-MAY-87です。 – Tushar

答えて

3

は、私はこれは、DB2、OracleとSQL Server上で動作する最新の10%

SELECT CASE WHEN hireorder <= cnt/10 THEN '*' ELSE '' END AS star, 
     ename, 
     hiredate 
FROM (
    SELECT ename, hiredate, 
     ROWNUMBER() OVER (PARTITION BY ename ORDER BY hiredate DESC) as hireorder, 
     COUNT(*) OVER() as cnt 
    FROM EMP 
) sub 

の前で星を表示する方法をです。他のプラットフォームも。あなたはあなたが使っていたことを言っていませんでした。

+0

ありがとうございます。それは私がまだROWNUMBER()、OVER()、PARTITION BYの関数とキーワードに到達して以来、私が探していたソリューションではありませんでした。同じ出力を持つケースを使用して正確な解を得るための完璧なアイデアを得ました。ここで私が思いついた解決策は次のとおりです。HELEDATE = SELECT(大文字/小文字をEMPから選択)場合は、* 'それ以外はSTAR、ENAME、EMPからの応答、 – Tushar

+0

@ Tushar - 私は、幸運を助けることができるとうれしい。 – Hogan

+0

@ Hogan-ありがとう。 – Tushar