0

我的老板今天有一个愿景,要彻底改变我几乎完整的程序的设计。因此,这是我目前使用的查询,它在产品组中显示具有帕累托位置的零件编号(帕累托是一个联盟,例如 1-100,最畅销的零件)。

我的老板希望的是用于帕累托历史的额外列。

这是当前代码:

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 的新表,它包含 pareto peroid 历史:

字段是:Pg、Part、Pareto、PareoidID、日期。

目前有 20K 零件具有唯一的 peroid ID 1-6,我需要像我的代码一样获取该 peroid 和 pg 的帕累托(只是没有得到 peroid),我需要为每个 peroid ID 1 执行 6 次-6。我认为这可能是多个选择语句或嵌套,但老实说,我无法弄清楚查询将有多大以及需要多少。

这方面的帮助会很棒!

非常感谢!

澄清每个选择将从新表中获得帕累托。每个选择都会得到 pareto 和别名 pareto1 , pareto2 .....等。
所以查询需要选择和命名 6 次 bu 仍然使用我目前的查询

4

1 回答 1

0

好的,解决方案是将表格本身更改为单独的表格。并通过视图简单地加入他们。

于 2012-04-27T11:01:36.223 回答