T-SQL 使用 While 循环填充列

T-SQL Populate Column Using While Loop

我有以下问题,SQL 还不是我的强项。我在 SQL Server 2014 中有以下程序,用于返回报价系统的每个单独报价中的金额。每个引用都有组,而组又包含部分。:

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 的值并将其放入 [Quote] 的新字段中。[ZQuoteBackupGL117] 备份 table 在每个名为 QuoteAmount(money, allow nulls) table 中的条目。稍后我也会 运行 在我的作品 table 中使用它。通常,我会避免为此使用循环,但此查询仅用于 运行 一次以填充追溯报价的 QuoteAmount,其中有数千个。我已经研究过使用 INSERT INTO,但我不确定我应该如何使用这个循环来构造它。如果你们能给我任何帮助,我们将不胜感激。

你可能想要这样的东西。

UPDATE [Quote].[ZQuoteBackupGL117] 
  SET QuoteAmount = (
    SELECT (Quantity * ((UnitPrice - ISNULL(DollarDiscount, 0)) - ROUND((((ISNULL(PercentDiscount,0)/100 + ISNULL(CustomerPercentDiscount,0)/100))) * UnitPrice, 2))) AS ExtendedPrice
    FROM [Quote].[PartGroupPart] p
    JOIN [Quote].[QuotePartGroup] g ON p.PartGroupID = g.PartGroupID
    JOIN [Quote].[ZQuoteBackupGL117] q ON g.QuoteID = q.QuoteID 
    WHERE QuoteNumberId = @QuoteNumberID AND g.IsRecommended = 0 AND g.ExcludeFromTotal = 0 AND COALESCE(q.GrandTotalValue,0) = 0
)    
WHERE QuoteNumberId = @QuoteNumberID

但我不会赌钱。