2010-12-08 25 views
0

J'ai un problème. J'ai 2 tables qui sont liées par un ID.SQL - Entrées distinctes avec quelques données cruddy

TableA 
    ID 
    Price 
    Other_Stuff 

TableB 
    ID 
    TableA_ID 
    Type 
    Age 

Je peux faire:

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 

Et les choses fonctionner comme prévu alors que les données sont bonnes, mais les données ne sont pas toujours bon. Normalement, il y a au plus un ou aucun de chaque type dans TableB. Le problème est que pour les données plus anciennes dans la table, avant que les types 3 et 5 existent, il y a la possibilité qu'il y ait deux type 2 et/ou deux type 2. dans ce cas, je voudrais que le deuxième type 1 soit traité comme un type 2 et le second type 2 comme un type 4.

Fondamentalement, je veux un seul enregistrement retourné pour chaque entrée dans la TableA avec les 4 âges énumérés dans leurs propres colonnes, je ne veux pas de plusieurs enregistrements pour chacun dans la TableA. J'utilise MS SQL 2000 .... vieux, je sais.

Merci,

Répondre

0

essayer de modifier les sous-requêtes à quelque chose comme:

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

Je pensais que cela aussi, mais le résultat est que la première entrée de la sous-requête est retourné. basé sur l'enregistrement 1 retourné, la partie ON de la jointure est utilisée, de sorte que le résultat final est que tous les enregistrements sauf un de la requête globale ont un âge, tout le reste est nul. – Justin808