2012-04-03 74 views
1

使用Microsoft SQL Server 2008我有一個需要注意的查詢。 我對正確執行查詢所需的連接感到困惑。SQL加入問題

USE [ShaftData] 
GO 
/****** Object: StoredProcedure [dbo].[MyPareto] Script Date: 04/03/2012 19:32:31 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[MyPareto] 
as 

SELECT i.pg, 
    dbo.OldParetoAnalysis.Pareto, 
    i.part, 
    i.sumofqty, 
    a.sumofqty, 
    dbo.NewParetoAnalysis.Pareto 

FROM 
    OPENQUERY(SACBAUTO, 'SELECT dbo.iLines.Part, 
          dbo.iLines.Pg, 
          SUM(dbo.iLines.Qty) as sumofqty, 
          dbo.iLines.Prefix 
        FROM Autopart.dbo.iLines 
        where prefix = ''i'' 
        and [datetime] > dateadd(month, -6, getdate()) 
        group by 
        dbo.ilines.pg, 
        dbo.ilines.part, 
        dbo.ilines.prefix 
        order by sumofqty desc') i 
RIGHT JOIN 
dbo.OldParetoAnalysis 
on 
i.part collate SQL_Latin1_General_CP1_CI_AS = dbo.OldParetoAnalysis.Part 

LEFT JOIN 
    OPENQUERY(SACBAUTO, 'SELECT dbo.aLines.Part, 
          dbo.aLines.Pg, 
          SUM(dbo.aLines.Qty) as sumofqty, 
          dbo.aLines.Prefix 
        FROM Autopart.dbo.aLines 
        where prefix = ''d'' 
        and [datetime] > dateadd(month, -6, getdate()) 
        group by 
        dbo.alines.pg, 
        dbo.alines.part, 
        dbo.alines.prefix 
        order by sumofqty desc') a 
ON 
dbo.OldParetoAnalysis.Part collate SQL_Latin1_General_CP1_CI_AS = a.part 
FULL JOIN 
dbo.NewParetoAnalysis 
ON 
a.part collate SQL_Latin1_General_CP1_CI_AS = dbo.NewParetoAnalysis.Part 
WHERE 
i.pg = '31' 
GROUP BY 
    i.pg, 
    dbo.OldParetoAnalysis.Pareto, 
    i.part, 
    i.sumofqty, 
    a.sumofqty, 
    dbo.NewParetoAnalysis.Pareto 
ORDER BY 
dbo.OldParetoAnalysis.Pareto desc 

好的解釋,我需要顯示這些字段。目前我需要從舊帕雷託的所有行來顯示。新帕雷託是舊版本的克隆版本,將用於更新(即計劃的下一部分)。

問題是,目前我的帕雷託顯示correcty 1-5780。但應匹配行的新pareto列顯示空白,這表明並非所有行都顯示(可能與空值有關)。

我希望它與我的連接有關,因爲您可以看到它可能是一個過於複雜的查詢,但它適用於我所需要的,問題是時間,其衝突,因爲我有24小時完成此查詢沒有事先計劃(是的,我也面臨着這個問題)。

哦,帕累託只是一個分配給最暢銷部分的數字,就像聯盟一樣。

如果您需要更多的信息,只需要問和編輯錯誤。

非常感謝

編輯: 好的解決了這個問題,答案將被更新。

我已經非常困惑,有人可以告訴我如何更新我的新舊帕雷託表嗎?因爲那裏有一噸的加入

+1

Yikes ...也許考慮改變'OPENQUERY'到一個引用你的鏈接服務器的視圖?這可能會大大簡化您的查詢,所以更容易讓您的頭腦。 – 2012-04-03 21:54:36

+0

yup在我去冒煙後,我終於破解了這個吸盤。 要求我更改查詢和連接的佈局。 如果有人感興趣,我發佈編輯後的版本 – lemunk 2012-04-03 22:04:53

+2

如果您仍然有問題,我會更新您的問題。如果您的更新查詢解決了您的問題,我會將其作爲您自己問題的答案發布,然後將其標記爲已接受的答案。 – 2012-04-03 22:10:38

回答

1

繼承人的代碼:

USE [ShaftData] 
GO 
/****** Object: StoredProcedure [dbo].[MyPareto] Script Date: 04/04/2012 08:50:40 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[MyPareto] 
@pgParam varchar(255) 
AS 
SELECT i.pg, 
    dbo.OldParetoAnalysis.Pareto, 
    i.part, 
    i.sales6months, 
    a.LostSales6Months, 
    dbo.NewParetoAnalysis.Pareto 

FROM 
OPENQUERY(SACBAUTO, 'SELECT dbo.iLines.Part, 
          dbo.iLines.Pg, 
          SUM(dbo.iLines.Qty) as sales6months, 
          dbo.iLines.Prefix 
        FROM Autopart.dbo.iLines 
        where prefix = ''i'' 
        and [datetime] > dateadd(month, -6, getdate()) 
        group by 
        dbo.ilines.pg, 
        dbo.ilines.part, 
        dbo.ilines.prefix 
        order by sales6months desc') i 
RIGHT JOIN 
dbo.OldParetoAnalysis 
on 
i.part collate SQL_Latin1_General_CP1_CI_AS = dbo.OldParetoAnalysis.Part 
INNER JOIN 
dbo.NewParetoAnalysis 
ON 
dbo.OldParetoAnalysis.Part collate SQL_Latin1_General_CP1_CI_AS = dbo.NewParetoAnalysis.Part 

LEFT JOIN 
OPENQUERY(SACBAUTO, 'SELECT dbo.aLines.Part, 
          dbo.aLines.Pg, 
          SUM(dbo.aLines.Qty) as LostSales6Months, 
          dbo.aLines.Prefix 
        FROM Autopart.dbo.aLines 
        where prefix = ''d'' 
        and [datetime] > dateadd(month, -6, getdate()) 
        group by 
        dbo.alines.pg, 
        dbo.alines.part, 
        dbo.alines.prefix 
        order by LostSales6Months desc') a 
ON 
dbo.NewParetoAnalysis.Part collate SQL_Latin1_General_CP1_CI_AS = a.part 
/*FULL OUTER JOIN 
dbo.NewParetoAnalysis 
ON 
a.part collate SQL_Latin1_General_CP1_CI_AS = dbo.NewParetoAnalysis.Part*/ 
WHERE 
i.pg = @pgParam 
GROUP BY 
    i.pg, 
    dbo.OldParetoAnalysis.Pareto, 
    i.part, 
    i.sales6months, 
    a.LostSales6Months, 
    dbo.NewParetoAnalysis.Pareto 
ORDER BY 
dbo.OldParetoAnalysis.Pareto asc 

現在我有一個新的問題。 使用c sharp,我將如何更新舊的和新的pareto表?