私の上司は今日、私のほぼ完全なプログラムの設計を完全に変更するというビジョンを持っていました。それで、これが私が現在使用しているクエリで、パレートの位置がある製品グループの部品番号を表示しています(パレートはリーグで、たとえば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と呼ばれる結合された新しいテーブルです。これは、paretoperoidの履歴を保持します。
フィールドは、Pg、Part、Pareto、PareoidID、dateです。
現在、一意のペロイドID 1〜6の20Kパーツがあり、コードがすでに行っているように(ペロイドを取得しない)、そのペロイドとpgのパレートを取得する必要があり、各ペロイドID1に対してこれを6回実行する必要があります。 -6。複数のselectステートメントまたはネストである可能性があると思いますが、正直なところ、クエリのサイズと必要な量について頭を悩ませることはできません。
これに関するヘルプは素晴らしいでしょう!
どうもありがとう!
各選択を明確にするために、新しいテーブルからパレートを取得します。各選択は、paretoとエイリアスをpareto1、pareto2.....etcとして取得します。
したがって、クエリは6回選択して名前を付ける必要がありますが、現在のクエリを引き続き使用します