2012-04-26 157 views
0

我的老闆今天有一個願景,即完全改變我幾乎完整的程序的設計。 因此,這裏是我現在使用的顯示產品組中的零件號碼的查詢,有pareto的位置(pareto是一個聯盟,例如1-100,最暢銷的零件)。sql查詢可能的嵌套選擇

我老闆的願望是用於帕雷託歷史的額外列。

這裏是當前的代碼:

ALTER PROCEDURE [dbo].[MyParetoConfirmed] 
@pgParam varchar(255) 

AS 
SELECT 
    i.pg, 
    dbo.OldParetoAnalysis.Pareto, 
    i.keycode, 
    i.sales6months, 
    a.LostSales6Months, 
    dbo.NewParetoAnalysis.Pareto 

FROM 
OPENQUERY(SACBAUTO, 'SELECT      
        dbo.product.Keycode, 
        dbo.iLines.Pg, 
        dbo.product.pg as ppg, 
        SUM(COALESCE(dbo.iLines.Qty, 0)) as sales6months, 
        dbo.iLines.Prefix 
       FROM 
        Autopart.dbo.product 
       LEFT OUTER JOIN 
        Autopart.dbo.ilines 
       ON 
        dbo.product.keycode = dbo.ilines.part 
        AND ([datetime] > dateadd(month, -6, getdate()) OR [datetime] is null) 
       WHERE 
        (dbo.iLines.Prefix = ''i'' OR dbo.iLines.Prefix is null) 
       group by 
        dbo.ilines.pg, 
        dbo.product.keycode, 
        dbo.ilines.prefix, 
        dbo.product.pg 
       order by sales6months desc') i 
RIGHT JOIN 
dbo.OldParetoAnalysis 
on 
i.keycode collate SQL_Latin1_General_CP1_CI_AS = dbo.OldParetoAnalysis.Part 
AND (i.pg = @pgParam or (i.pg is null AND i.ppg = @pgParam)) 
INNER JOIN 
dbo.NewParetoAnalysis 
ON 
dbo.OldParetoAnalysis.Part collate SQL_Latin1_General_CP1_CI_AS = dbo.NewParetoAnalysis.Part 

LEFT JOIN 
OPENQUERY(SACBAUTO, 'SELECT      
        dbo.product.Keycode, 
        dbo.aLines.Pg, 
        SUM(COALESCE(dbo.aLines.Qty, 0)) as lostsales6months, 
        dbo.aLines.Prefix 
       FROM 
        Autopart.dbo.product 
       LEFT OUTER JOIN 
        Autopart.dbo.alines 
       ON 
        dbo.product.keycode = dbo.alines.part 
        AND ([datetime] > dateadd(month, -6, getdate()) OR [datetime] is null) 
       WHERE 
        (dbo.aLines.Prefix = ''d'' OR dbo.aLines.Prefix is null) 
       group by 
        dbo.alines.pg, 
        dbo.product.keycode, 
        dbo.alines.prefix 
       order by lostsales6months desc') a 
ON 
dbo.NewParetoAnalysis.Part collate SQL_Latin1_General_CP1_CI_AS = a.keycode 
WHERE(i.pg = @pgParam or (i.pg is null AND i.ppg = @pgParam) AND dbo.NewParetoAnalysis.Pareto is not null) 
GROUP BY 
    i.pg, 
    dbo.OldParetoAnalysis.Pareto, 
    i.keycode, 
    i.sales6months, 
    a.LostSales6Months, 
    dbo.NewParetoAnalysis.Pareto 
ORDER BY 
i.sales6months Desc 

我需要的是一個新的表連接稱爲paretoMain,這個擁有帕累託peroid歷史:

領域是:PG,部分,帕累託,PareoidID,日期。

目前有20K部件具有獨特的peroid ID 1-6,我需要得到該perper的pareto和pg,就像我的代碼已經做的那樣(只是沒有得到perpid),我需要做6次for每個ID爲1-6。 我認爲這可能是multipule select語句或嵌套,但說實話,我不能說我的頭多大的查詢將是多少,需要。

對此的幫助將會很棒!

非常感謝!

澄清每個選擇將從新表中獲得pareto。每個選擇將得到帕雷託和別名,如pareto1,pareto2 .....等。
因此,查詢需要選擇和命名6次BU仍然使用我現在有的查詢

回答

0

好的解決辦法是將表本身改爲單獨的表。只是通過意見加入他們。