2012-04-26 3 views
0

У моего босса сегодня есть видение, чтобы полностью изменить дизайн моей почти полной программы. Итак, вот запрос, который я использую в настоящее время для отображения номеров деталей в группе продуктов с парето-позицией (pareto - это лига, например, 1-100, наиболее продаваемые части).sql query возможно вложенные выбирает

Для чего нужен мой босс - дополнительные столбцы, используемые для истории парето.

вот текущий код:

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, это держит парето пероид историю:

поля являются: Pg, часть, Парето, PareoidID, дата ,

В настоящее время есть 20K частей с уникальной идентификацией Peroid ID 1- 6, мне нужно получить парето для этого пероида и pg, как мой код уже делает (просто не получает peroid), и мне нужно сделать это 6 раз для каждый peroid ID 1-6. Я думаю, что это могут быть множественные заявления выбора или гнезда, но, честно говоря, я не могу разорвать голову вокруг того, насколько большой будет запрос и сколько нужно.

Помощь на этом будет замечательно!

Большое спасибо!

Чтобы уточнить каждый выбор, вы получите парето из новой таблицы. каждый выбор будет получать парето и псевдоним как pareto1, pareto2 ..... и т. д.
Таким образом, запрос должен выбрать и назвать 6 раз по-прежнему использовать запрос, который у меня есть в настоящее время

ответ

0

Хорошо, решение заключалось в том, чтобы изменить сами таблицы на отдельные. и просто присоединяться к ним через представления.

Смежные вопросы