Ceci est une requête allégée de mon plus gros problème, mais l'essentiel est que j'essaie de joindre à l'intérieur une sélection où la sélection est limitée par la sélection externe. Est-ce possible? J'obtiens une erreur concernant l'identifiant multipart S.Item et S.SerialNum sur la sélection interne.
Le Gist est le suivant, nous devons regrouper par élément/série, et la requête est suffisamment grande, nous ne voulons pas revenir en arrière et regrouper tout dans la requête entière pour cette jointure mineure.
SELECT S.Item, S.SerialNum, S.ReceiveDate
FROM SALES S
INNER JOIN (SELECT W.Item, W.SerialNum, MIN(W.SalesDate)
FROM WARRANTY W
WHERE W.Item = S.Item AND
W.SerialNum = S.SerialNum
GROUP BY Item, SerialNum, SalesDate) WW
ON S.Item = WW.Item AND WW.SerialNum
Il semble que vous ayez votre référence JOIN
au mauvais endroit.
SELECT S.Item, S.SerialNum, S.ReceiveDate
FROM SALES S
INNER JOIN
(
SELECT W.Item, W.SerialNum, MIN(W.SalesDate) MinSalesDate
FROM WARRANTY W
GROUP BY Item, SerialNum
) WW
ON S.Item = WW.Item
AND S.SerialNum = WW.SerialNum
Modifier, en fonction de votre commentaire sur le filtrage, vous pouvez placer une clause WHERE
sur votre SELECT
interne:
SELECT S.Item, S.SerialNum, S.ReceiveDate, WW.MinSalesDate
FROM SALES S
INNER JOIN
(
SELECT W.Item, W.SerialNum, MIN(W.SalesDate) MinSalesDate
FROM WARRANTY W
WHERE yourFilter here
GROUP BY Item, SerialNum
) WW
ON S.Item = WW.Item
AND S.SerialNum = WW.SerialNum
Vous pouvez également essayer une expression common_table_expression au lieu d'un JOIN. Vérifiez la clause WITH ici.
Cela pourrait être quelque chose comme ceci:
WITH Warranty_CTE (Item, SerialNum, MinSalesDate)
AS
(
SELECT W.Item, W.SerialNum, MIN(W.SalesDate) MinSalesDate
FROM WARRANTY W
GROUP BY Item, SerialNum
)
SELECT S.Item, S.SerialNum, S.ReceiveDate
FROM SALES S
INNER JOIN Warranty_CTE WC
ON S.Item = WC.Item
AND S.SerialNum = WC.SerialNum