次の名前のテーブルがあります。
mktActualsales (SaleID, EmployeeID, PeriodID,PositionID)
mktActualSalesItems(SaleItemID, saleID, Item, Quantity)
mktSalesTargets(TargetID, EmployeeID, PeriodID,PositionID)
mktSalesTargetItems(TargetITemID, TargetID,ItemID, Quantity )
sysPeriods(PeriodID, StartDate, EndDate)
上記のテーブル間の関係は明らかです。sale と saleDetails は SaleID を介して関連付けられ、Target と TargetDetail は TargetID を介して関連付けられます。表示したいのは全期間の従業員の売上と目標です。売上がない期間もあれば、目標が達成されない期間もあります。
それを行う私の計画 (これまでのところ) は、1 つのサブクエリで sales と saleDetail の内部結合を取得し、別のサブクエリで target と targetDetail を取得し、両方のサブクエリで完全な外部結合を実行して、必要なデータを取得することです。しかし、結果は非常に遅いです。パフォーマンスを高速化するために私ができること。完全外部結合とユニオンオールのパフォーマンス比較のためにグーグルで検索しましたが、運がありませんでした。現時点では、Union/Union All を使用して目的の結果を達成できるかどうかはわかりません。
編集
これは私がこれまでに持っているクエリです。テーブルも編集
SELECT sale.ActualSaleID,
COALESCE (sale.EmployeeID, saleTarget.EmployeeID) AS EmployeeID,
COALESCE (sale.PositionID, saleTarget.PositionID) AS PositionID,
COALESCE (sale.PeriodID, saleTarget.PeriodID) AS PeriodID,
COALESCE (sale.SKUID, saleTarget.SKUID) AS SKUID,
COALESCE (sale.SalesQuantity, 0) AS SalesQuantity,
saleTarget.SalesTargetID,
COALESCE (saleTarget.TargetQuantity, 0) AS TargetQuantity,
saleTarget.SalesTargetItemID,
sale.ActualSaleItemID,
p.StartDate,
p.EndDate
FROM (
SELECT s.ActualSaleID,
s.EmployeeID,
s.PeriodID,
s.PositionID,
si.ActualSaleItemID,
si.SKUID,
si.SalesQuantity
FROM dbo.mktActualSaleItems AS si
INNER JOIN dbo.mktActualSales AS s
ON si.ActualSaleID = s.ActualSaleID
) AS sale
FULL OUTER JOIN
(
SELECT t.EmployeeID,
t.PeriodID,
t.PositionID,
t.SalesTargetID,
ti.SKUID,
ti.TargetQuantity,
ti.SalesTargetItemID
FROM dbo.mktSalesTargetItems AS ti
INNER JOIN dbo.mktSalesTargets AS t
ON t.SalesTargetID = ti.SalesTargetID
) AS saleTarget
ON sale.PeriodID = saleTarget.PeriodID
AND sale.PositionID = saleTarget.PositionID
AND sale.SKUID = saleTarget.SKUID
INNER JOIN dbo.sysPeriods AS p
ON p.PeriodID = COALESCE (sale.PeriodID, saleTarget.PeriodID)