2016-10-25 14 views
0

私の質問はこのmineの古いクエリに関連しています。異なる列の異なる値に対して同じ列を選択してフィルタリングします。

Select same column for different values on a different column

以下は私のテーブルであり、私の要件は、「J」で始まり、その後も同じ従業員のための対応SEQ4NAMEを選択seq3nameを見つけることです。

EMP_ID SEQ_NR NAME 
874830 3  JOHN     
874830 4  NOE   
874830 21  MIKE  
874830 22  BILL 
874830 23  ROBERT 
874830 24  STEVE 
874830 25  JERRY 

SELECT EMP_ID 
     MAX(CASE WHEN SEQ_NR = 3 THEN NAME END) AS SEQ3NAME 
     MAX(CASE WHEN SEQ_NR = 4 THEN NAME END) AS SEQ4NAME 
FROM AC_XXXXX 
WHERE SEQ_NR = '3' AND NAME LIKE '%J'; 

所望の出力

EMP_ID SEQ3NAME SEQ4NAME 
874830 JOHN  NOE 

しかし、ここでの問題は、私はあなたが私たちがSeq4nameを得ることができ、それを通して解決策をアドバイスしてくださいNULL.Canとしてseq4nameを取得しますか?

ありがとうございました。

+0

をあなたはNAME' 'の' MAXを() '取っていますか? –

+0

いいえ、私はNAMEのMAX()を取っていません。上のリンクには詳細がありました。しかし、リンクがうまく出なかったと思います。 –

答えて

0

私が理解しているように、nameの最初の文字が「J」の行をすべて見つけようとします。もしそうなら、NAME LIKE 'J%'にする必要があり、その逆もありません。 SEQ_NR = 3で行を制限する以外に、結果セットにSEQ_NR = 4の行がないことを意味します。

私が思うに、あなたのようなものを使用する必要があります

SELECT EMP_ID 
     MAX(CASE WHEN SEQ_NR = 3 THEN NAME END) AS SEQ3NAME 
     MAX(CASE WHEN SEQ_NR = 4 THEN NAME END) AS SEQ4NAME 
FROM AC_XXXXX 
WHERE SEQ_NR =ANY(3,4) 
AND NAME LIKE 'J%' 
GROUP BY EMP_ID; 

EDIT別ソリューション

SELECT EMP_ID 
     MAX(CASE WHEN SEQ_NR = 3 AND NAME LIKE 'J%' THEN NAME END) AS SEQ3NAME 
     MAX(CASE WHEN SEQ_NR = 4 THEN NAME END) AS SEQ4NAME 
FROM AC_XXXXX e 
WHERE SEQ_NR =ANY(3,4) 
    AND EXISTS (select null 
       from AC_XXXXX se 
       where e.EMP_ID = se.EMP_ID 
       AND NAME LIKE 'J%') 
GROUP BY EMP_ID; 
+0

@ Micheal。あなたの応答のためにありがとう。元のクエリに必要な出力を追加しました。「J」で始まるseq3nameを見つけて、同じ従業員の対応するSEQ4NAMEを選択する必要があります。まだSEQ4NAMEをヌルとして取得していました。 –

+0

対応するSEQ4NAMEとは何を意味していますか?どのように行を関連付ける必要がありますか? SEQ_NR = 3およびSEQ_NR = 4の行?私は同じemp_idを見るが、別の名前を見る。あなたが名前が「J%」で、それ以外の場合にはNULL、SEQ4NAMEは常に、emp_idとSEQ3NAMEを取得する必要があるかもしれませんか?または何? –

+0

はい、同じemp_IDで関連付けられています。名前は依存する名前です.Seq nr 3は従属ノードであり、seq nr 4は別の従属ノードです。従属3名がJで始まり、対応する従属4名..希望を明確にする。 –

関連する問題