次の問題があり、SQLはまだ私の最も強力なスキルではありません。私は、Quoted Systemの各見積もりの金額を返すために働くSQL Server 2014の次の手順を持っています。それぞれの引用は、順番にそれらの中に部品を持っているグループを、持っている:Whileループを使用してT-SQLに列を取り込み
USE [My_DB_Name]
GO
DECLARE @QuoteNumberID int;
SELECT @QuoteNumberID = QuoteNumberId FROM [Quote].[Quote]
WHILE @QuoteNumberID IS NOT NULL
BEGIN
INSERT INTO [Quote].[ZQuoteBackupGL117] (QuoteAmount)(
SELECT ISNULL(SUM(ExtendedPrice) ,0) AS QuoteTotal
FROM(
SELECT (Quantity * ((UnitPrice - ISNULL(DollarDiscount, 0)) -
ROUND((((ISNULL(PercentDiscount,0)/100 + ISNULL(CustomerPercentDiscount,0)/100))) * UnitPrice, 2))) AS ExtendedPrice
FROM [Quote].[PartGroupPart] p
INNER JOIN [Quote].[QuotePartGroup] g ON p.PartGroupID = g.PartGroupID
INNER JOIN [Quote].[ZQuoteBackupGL117] q ON g.QuoteID = q.QuoteID
WHERE QuoteNumberId = @QuoteNumberID AND g.IsRecommended = 0 AND g.ExcludeFromTotal = 0 AND (q.GrandTotalValue IS NULL OR q.GrandTotalValue = 0)
)tmp)
SELECT @QuoteNumberID = MAX(QuoteNumberId) FROM [Quote].[Quote] WHERE @QuoteNumberId > QuoteNumberID
END
私は何をしようとしていることQuoteTotalの値を取得し、[引用]で新しいフィールドに入れている。[ZQuoteBackupGL117]テーブルの各エントリにQuoteAmount(money、allow nulls)という名前のバックアップテーブルがあります。私は後でそれを私のプロダクションテーブルでも実行します。通常、これはループを使用しないでください。ただし、このクエリはQuoteAmountを一度実行して遡及的な引用文を作成することのみを目的としています。 INSERT INTOを使用してみましたが、このループを使用してどのように構造化するのかはわかりません。あなたが私に与えることができるどんな助けも高く評価されます。
明らかに、これはループではなく、挿入文または更新文で行うべきです。あなたは実際に何をしようとしているのかわからないので、あなたの例では更新または挿入ステートメントが使用されている場所は表示されません。 – Hogan
@Hoganは、私がしようとしていることをよりよく説明しようと更新しました。 – DarthVis17
内部クエリは単一のQuoteNumberIDに対して複数の行を返しますか?つまり、複数の部品にまたがる見積もり合計を生成しようとしていますか? – AaronLS