2011-08-01 10 views
0

私はいくつかの列で別個の選択を実行する必要があり、そのうちの1つの列は区別されません。私のSQL文では、どの列が個別のグループを構成するかを指定できますか。DB2で単一列以外の列を選択するにはどうすればよいですか?

現在、私はこれをやっています。

Select distinct a,b,c,d from TABLE_1 inner join TABLE_2 on TABLE_1.a = TABLE_2.a where TABLE_2.d IS NOT NULL; 

私が持っている問題は、列Dが異なる値を保持しているので、私は上記のSQLのための2行を取得しています。列dを無視しても、select句に列dを持たせると、どうやって別の列グループ(a、b & c)を形成できますか?

FYI:でも改良して、私が使用しているDB2

おかげ サンディープ

+1

... 'd 'のすべての値を望んでいるのですか、それとも(特にいくつかの)値をすべて1つにしますか?あなたのテーブル構造を入手できますか?これを行うにはいくつかの異なる方法があります... –

+0

X-Zeroが正しい - dの値が複数ある場合は、どの値を結果に表示しますか? –

+0

@ X-Zero 通常、 'd'がNOT NULLであるかどうかをチェックします。私はそれを反映するために私のクエリを変更しました。 – Sandeep

答えて

0

さて、あなたの質問には、まだかなり一般的です。だから、あなたは一般的な答えを得る。あなたのテーブル構造や、ご希望の結果についての詳細を知らなくても、意味のある答えを出すことは不可能かもしれ

が、ここに行く:

SELECT a, b, c, d 
FROM table_1 as t1 
JOIN table_2 as t2 
ON t2.a = t1.a 
AND t2.[some_timestamp_column] = (SELECT MAX(t3.[some_timestamp_column]) 
            FROM table_2 as t3 
            WHERE t3.a = t2.a) 

これはtable_1を取得するために、単一の行が移入されていることを前提とし、 とtable_2の1対多の関係が作成され、dの異なる値のために、ユニークな[some_timestamp_column]回に配置されているためです。この場合、table_1に一致する最新のtable_2レコードが取得されます。

+0

おかげでX-Zero..forがこれで私の問題を解決しました。 – Sandeep

1
SELECT a,b,c,MAX(d) 
FROM table_1 
INNER JOIN table_2 ON table_1.a = table_2.a 
GROUP BY a,b,c 
+0

返信してくれてありがとう、私のシナリオでは通常 'd'は文字列なので、私がチェックできるのはおそらく' WHERE TABLE_2.d IS NOT NULL'です。 – Sandeep

関連する問題