2016-10-03 15 views
2

フォーラムを検索する前にフォーラムを検索しましたが、同じ問題に近いトピックがいくつか見つかりましたが、まだ質問が残っていますので、ここに投稿しています。異なる列の異なる値に対して同じ列を選択してください

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

出力は次のようになります。

EMP ID SEQ3NAME SEQ4NAME SEQ21NAME SEQ22NAME SEQ23NAME SEQ24NAME SEQ25NAME 
874830 JOHN  JOE  MIKE  BILL  ROBERT  STEVE JERRY 

SELECT A.EMP_ID 
     ,A.NAME SEQ3NAME 
     ,B.NAME SEQ4NAME 
FROM AC_XXXX_CONTACT A 
INNER JOIN AC_XXXX_CONTACT B ON A.EMP_ID = B.EMP_ID 
WHERE A.SEQ_NR = '03' AND B.SEQ_NR = '04' 
AND B.EMP_ID = '874830'; 

上記のクエリは、以下の結果を得るのに役立ちました。

EMP_ID SEQ3NAME SEQ4NAME 
874830 JOHN  JOE 

私はテーブルに5回以上参加しなければならない私の質問には、すべてのフィールド(すなわちSEQ NR = 25まで)を取得することです。

結果を得るためのより良い方法はありますか?

私は、Oracle DBに対するあなたの助けを

感謝を照会メートル。

新しい要件

New Input 

STU-ID SEM CRS-NBR 
12345 1  100 
12345 1  110 
12345 2  200 

New Output 

stu-id crs1 crs2 
12345 100 200 
12345 110 
+0

可能なSEQ_NR値の固定リストがありますか?あらかじめわかっていますか?そうでなければ、単純なSQLでは望みのことはできません。 「ダイナミックSQL」が必要です。これは基本的に、1つのクエリでテーブルを読み取る必要があります。その出力は、目的の出力を生成する新しいクエリのテキストです。問題は、SQLクエリが、出力に含まれるすべての列の数と名前(およびデータ型)を事前に知っていなければならないことです。 – mathguy

+0

はい、SEQ_NRには上記の値しかありません。 –

+0

Oracleのバージョンは?ピボットをする必要があり、最も単純なソリューションはOracleのバージョンによって異なります。どのバージョンでも結合は必要ありません。 – mathguy

答えて

3
あなたは(表 AC_XXXXから)テストデータを提供しなかったため、テストされていない

:Oracleの10またはそれ以前のバージョンについては
(Oracleの11 PIVOT句を使用して)

select * 
from (select emp_id, seq_nr, name 
     from ac_xxxx 
     where emp_id = '874830') 
pivot (max(name) for seq_nr in (3 as seq3name, 4 as seq4name, 21 as seq21name, 
         22 as seq22name, 23 as seq23name, 24 as seq24name, 25 as seq25name) 
    ) 
; 

ピボットは「手で」行われました。

select max(emp_id) as emp_id,    -- Corrected based on comment from OP 
     max(case when seq_nr = 3 then name end) as seq3name, 
     max(case when seq_nr = 4 then name end) as seq4name, 
    -- etc. (similar expressions for the other seq_nr) 
from ac_xxxx 
where emp_id = '874830' 
; 

またはemp_idは、group by emp_idを追加するとmax()の範囲内にある必要はありません.group by emp_idは、WHERE句がなくても動作しますが、異なるが関連する質問があります。

+0

ありがとうmathguy。出来た。 私は答えをアップアップしましたが、私の投票は記録されましたが、私の評判が15未満であるため、公表されたポストスコアは変更されません。 –

+1

@Cyber​​_Knight - 心配しなくても、私は本当に評判は気にせず、SOのような場所は「評判」なしでも良いかもしれないと信じています。 – mathguy

+0

こんにちは、ピボットを使わずに解決策を教えてもらえますか? –

関連する問題