2011-07-03 39 views
0

私はオラクルのためにトッドを使用しています。SQLクエリ - 別名+別のピリオド+別のテーブル

エイリアス - 同じ列を2回使用したい場合は、どうしたらいいですか?
col1、col2、col3のテーブルxがあるとしましょう。 Col1には顧客の連絡先番号(211,212,213など)が含まれています

さらに、col1、col4、col5を持つ別のテーブルyがあります。両方のテーブルのCol1は等しい。 Col4は、番号がメインかセカンダリかを示します。私が何をしたいか

y

(Col1,col4,col5) 
(211,Main,v) 
(212,Secondary,s) 
(213,Secondary,w) 

は以下の通りです:

SELECT col2, col1 as mainNumbet, col1 as secondNumber 
    FROM x 
WHERE mainNumber IN (SELECT col1 
         FROM y 
         WHERE col4 = 'main') 
    AND SecondNumber IN (SELECT col1 
          FROM y 
         WHERE col4 = "secondary") 

しかし、それは問題があると述べています?!

+4

に動作すべきものは、「問題があると述べ、」、あなたが問題を支援したいとき - あなたに伝えられている情報を含めることができます。 ORAエラー番号と同じように、少なくとも... Oracleのバージョンも知っていてもかまいません。 –

答えて

1

コードにはいくつかの問題があります。

SELECT x.col2, 
     CASE WHEN col4 ='main'  THEN x.col1 END AS mainNumber, 
     CASE WHEN col4 ='secondary' THEN x.col1 END AS secondNumber, 
FROM x 
    JOIN y 
    ON x.col1 = y.col1 
0

あなたは何であるかcol2に言うことはありませんが、あなたが同じテーブルの同じ行から同じ列(COL1)を取り、別の割り当てしようとしている。

は、おそらくこれは何をしたいですそれに意味(main_numberとsecond_number)

SELECT col2, col1 as mainNumbet, col1 as secondNumber 
    FROM x 

COL1は、それが唯一のメインまたはセカンダリなることがあるので、これは動作するはず「Y」上で一意である場合

SELECT col2, col1 as number, (select col4 from y where y.col1=x.col1) type 
    FROM x 

COL1が「Y」に一意でない場合、それは、メインとセカンダリすることができ、これは

SELECT col2, col1 as number, 
    (select col4 from y where y.col1=x.col1 and col4 = 'main' and rownum=1) m_ind, 
    (select col4 from y where y.col1=x.col1 and col4 = 'secondary' and rownum=1) s_ind 
FROM x