Voici comment sélectionner plusieurs colonnes à partir d'une sous-requête :
SELECT
A.SalesOrderID,
A.OrderDate,
SQ.Max_Foo,
SQ.Max_Foo2
FROM
A
LEFT OUTER JOIN
(
SELECT
B.SalesOrderID,
MAX(B.Foo) AS Max_Foo,
MAX(B.Foo2) AS Max_Foo2
FROM
B
GROUP BY
B.SalesOrderID
) AS SQ ON SQ.SalesOrderID = A.SalesOrderID
Si ce que vous essayez de faire est d'obtenir les valeurs de la ligne avec la valeur la plus élevée pour Foo (plutôt que le maximum de Foo et le maximum de Foo2 - ce qui n'est PAS la même chose), ce qui suit fonctionnera généralement mieux qu'une sous-requête :
SELECT
A.SalesOrderID,
A.OrderDate,
B1.Foo,
B1.Foo2
FROM
A
LEFT OUTER JOIN B AS B1 ON
B1.SalesOrderID = A.SalesOrderID
LEFT OUTER JOIN B AS B2 ON
B2.SalesOrderID = A.SalesOrderID AND
B2.Foo > B1.Foo
WHERE
B2.SalesOrderID IS NULL
En gros, vous dites : donnez-moi la ligne de B où je ne peux trouver aucune autre ligne de B avec le même SalesOrderID et un Foo plus grand.