1
再帰的CTEクエリを使用して原価計算書を作成しようとしています。私が実行している問題は、マテリアルパーツの一部のリビジョンを選択する必要がありますが、再帰的なクエリではTOP演算子を使用できないということです。問題に関する詳細情報を提供する :TOPまたはOFFSET演算子は再帰共通テーブル式の再帰部分には使用できません
- 一部改訂(PartRevテーブル)は、多くの材料(PartMtl表)からなる部品表として有しています。
- 部品表の材料には、独自の材料を使用することもできます。これを得るには、重要な部分(すでにこれを持っている)とその改訂版が必要です。しかし、マテリアルパーツリビジョンはERPシステムによって記録されません(ERPシステムを開発していないため、これを変更することはできません)。むしろその場で計算され、単一のレコードが選択されます。
- SQL Serverでは、再帰クエリ内でTOP演算子を使用できないため、1つのリビジョンを選択できません。
私はこれを回避するために何ができるかわかりません。以下は、私が試みたSQLコードです。
あなたはこのように、あなたが参加したサブクエリでそれを使用することができ、この場合、ウィンドウ関数を使用する必要がWITH CostedBOMFinance AS
(
select
Erp.PartRev.PartNum,
Erp.PartRev.RevisionNum,
case when Erp.PartMtl.ViewAsAsm = 1 then 'Asm' else 'Mtl' end as MtlType,
Erp.PartMtl.MtlSeq as Seq,
Erp.PartMtl.MtlPartNum,
(
select TOP(1) Erp.PartRev.RevisionNum
from Erp.PartRev as MtlRev
where MtlRev.Approved = 1 and
MtlRev.PartNum = Erp.PartMtl.MtlPartNum
) as MtlRev,
Erp.Part.PartDescription,
Erp.PartMtl.QtyPer,
Erp.PartMtl.UOMCode,
Erp.PartCost.StdBurdenCost,
Erp.PartCost.StdLaborCost,
Erp.PartCost.StdMaterialCost as StdUnitCost,
Erp.PartCost.StdSubContCost,
Erp.PartCost.StdBurdenCost + Erp.PartCost.StdLaborCost + Erp.PartCost.StdMaterialCost + Erp.PartCost.StdSubContCost as TotalStdCost,
1 as Level
from Erp.PartRev
join Erp.PartMtl on Erp.PartMtl.Company = Erp.PartRev.Company and
Erp.PartMtl.PartNum = Erp.PartRev.PartNum and
Erp.PartMtl.RevisionNum = Erp.PartRev.RevisionNum
join Erp.Part on Erp.Part.Company = Erp.PartMtl.Company and
Erp.Part.PartNum = Erp.PartMtl.MtlPartNum
join Erp.PartCost on Erp.PartCost.Company = Erp.Part.Company and
Erp.PartCost.PartNum = Erp.Part.PartNum
UNION ALL
select
Erp.PartRev.PartNum,
Erp.PartRev.RevisionNum,
case when Erp.PartMtl.ViewAsAsm = 1 then 'Asm' else 'Mtl' end as MtlType,
Erp.PartMtl.MtlSeq as Seq,
Erp.PartMtl.MtlPartNum,
(
select TOP(1) MtlRev.RevisionNum
from Erp.PartRev as MtlRev
where MtlRev.Approved = 1 and
MtlRev.PartNum = Erp.PartMtl.MtlPartNum
) as MtlRev,
Erp.Part.PartDescription,
Erp.PartMtl.QtyPer,
Erp.PartMtl.UOMCode,
Erp.PartCost.StdBurdenCost,
Erp.PartCost.StdLaborCost,
Erp.PartCost.StdMaterialCost as StdUnitCost,
Erp.PartCost.StdSubContCost,
Erp.PartCost.StdBurdenCost + Erp.PartCost.StdLaborCost + Erp.PartCost.StdMaterialCost + Erp.PartCost.StdSubContCost as TotalStdCost,
Level + 1
from Erp.PartRev
join Erp.PartMtl on Erp.PartMtl.Company = Erp.PartRev.Company and
Erp.PartMtl.PartNum = Erp.PartRev.PartNum and
Erp.PartMtl.RevisionNum = Erp.PartRev.RevisionNum
join Erp.Part on Erp.Part.Company = Erp.PartMtl.Company and
Erp.Part.PartNum = Erp.PartMtl.MtlPartNum
join Erp.PartCost on Erp.PartCost.Company = Erp.Part.Company and
Erp.PartCost.PartNum = Erp.Part.PartNum
join CostedBOMFinance as CostedBOMFinanceParent on CostedBOMFinanceParent.PartNum = Erp.PartMtl.MtlPartNum and
CostedBOMFinanceParent.RevisionNum = MtlRev
)
select * from CostedBOMFinance
サブクエリでウィンドウ関数を使用する必要があります。これまでのトップ部分のクエリを表示できますか?ウィンドウの表示方法を教えてください。最初の部分は必要ありません。再帰的な問合せでは、すべて共用体です。 – Hogan
ああ、私は今 "トップ"を参照してください。あなたはどのようにこれがうまくいくと思いますか、あなたは注文しません。 – Hogan
また、テーブルエイリアスの使用を開始する必要があります。選択リストでは3つの部分の名前付けが推奨されていません。 https://technet.microsoft.com/en-us/library/bb510662.aspx –