2010-12-08 6 views
0

私は問題があります。私はIDでリンクされた2つのテーブルを持っています。私にできることSQL - いくつかのcruddyデータを持つ明確なエントリ

TableA 
    ID 
    Price 
    Other_Stuff 

TableB 
    ID 
    TableA_ID 
    Type 
    Age 

SELECT 
    M1.Age, 
    F1.Age, 
    M2.Age, 
    F2.Age, 
FROM TableA 
LEFT JOIN (SELECT * FROM TableB WHERE TableB.Type='1') AS M1 ON M1.TableA_ID=TableA.ID 
LEFT JOIN (SELECT * FROM TableB WHERE TableB.Type='2') AS F1 ON F1.TableA_ID=TableA.ID 
LEFT JOIN (SELECT * FROM TableB WHERE TableB.Type='3') AS M2 ON M2.TableA_ID=TableA.ID 
LEFT JOIN (SELECT * FROM TableB WHERE TableB.Type='4') AS F2 ON F2.TableA_ID=TableA.ID 

物事はデータは常に良いではありません期待通りのデータは良好である一方で、動作しますが。通常、TableBにはそれぞれのタイプが最大で1つ、またはまったくありません。問題は、テーブルの古いデータの場合、タイプ3と5が存在する前に、タイプ1とタイプ2の2つが存在する可能性があります。その場合、2番目のタイプ1をタイプ2として扱い、2番目のタイプ2をタイプ4として扱いたいとします。

基本的には、テーブルAの各エントリに対して、私は自分のコラムで、TableAのそれぞれについて複数のレコードを必要としません。

私はMS SQL 2000を使用しています....古い、私は知っています。

おかげで、

答えて

0

は次のようにサブクエリを変更してみてください:

SELECT TOP 1 * FROM TableB WHERE TableB.Type='1 AND TableA_ID=TableA.ID 
+0

私もこのことを思ったが、結果は、サブクエリの最初のエントリが返されることです。 1つの返されたレコードに基づいて、結合のON部分が使用されるので、最終的な結果は、問合せ全体の1レコードを除いてすべてのレコードには年齢があり、それ以外はすべてNULLです。 – Justin808

関連する問題