ジャスト(括弧を使用して)自分のサブクエリの中にこれらのSQL文の両方を固執し、我々はそれが結果メインクエリに設定されていますを参照できるように、各サブクエリにエイリアスを与える:私たちは「
SELECT
t1.*,
t2.*
FROM
(
SELECT RHeads.[Document],
RLines.Part,
RHeads.Supp,
RHeads.DATETIME,
RLines.Unit,
RLines.CQty,
RHeads.POrder,
RHeads.Corder,
RHeads.Branch
FROM RLines
RIGHT OUTER JOIN RHeads ON RLines.[Document] = RHeads.[Document]
WHERE (RHeads.DATETIME >= DATEADD(MONTH, - 3, GETDATE()))
AND (RHeads.Corder = '02022076')
) t1
LEFT OUTER JOIN
(
SELECT Mvpr.Prefix,
Mvpr.SubKey1,
Mvpr.SubKey2,
Mvpr.A12
FROM Mvpr
INNER JOIN vwProduct ON Mvpr.SubKey1 = vwProduct.KeyCode
WHERE (Mvpr.Prefix = 'c')
) t2 ON t1.Part = t2.SubKey1
ORDER BY t1.DATETIME DESC;
LEFT OUTER JOINを使用して、すべてのレコードをt1
(最初のクエリ)から取得し、一致するレコードのみをt2
(2番目のクエリ)から取得します。
また、ORDER BY句をメインクエリに移動したため、サブクエリの内部でORDERを実行できません(また、許可されていても、結合後に順序が失われて余分なものになります)。
ここで集計を行っていないので、おそらくサブクエリなしでこれを書き直すこともできます。
私はあなたのデータに関するいくつかの仮定をしたが、おそらくのようなものました:あなたが第一クエリの粒度はCTEの中に入れて維持し、存在を確認したい場合は
SELECT RHeads.[Document],
RLines.Part,
RHeads.Supp,
RHeads.DATETIME,
RLines.Unit,
RLines.CQty,
RHeads.POrder,
RHeads.Corder,
RHeads.Branch,
Mvpr.Prefix,
Mvpr.SubKey1,
Mvpr.SubKey2,
Mvpr.A12
FROM RHeads
LEFT OUTER JOIN RLines
ON RLines.[Document] = RHeads.[Document]
LEFT OUTER JOIN vwProduct
ON Mvpr.SubKey1 = vwProduct.KeyCode
LEFT OUTER JOIN Mvpr
ON vwProduct.KeyCode = Mvpr.Subkey1
AND Mvpr.Prefix = 'c'
WHERE
RHeads.DATETIME >= DATEADD(MONTH, - 3, GETDATE())
AND RHeads.Corder = '02022076'
「一致する情報」を定義します。両方のクエリの列には種類の関係がないようです。 –