Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql T-SQL使用While循环填充列_Tsql_Sql Server 2014_Insert Into - Fatal编程技术网

Tsql T-SQL使用While循环填充列

Tsql T-SQL使用While循环填充列,tsql,sql-server-2014,insert-into,Tsql,Sql Server 2014,Insert Into,我有以下问题,SQL还不是我最强的技能。我在SQL Server 2014中有以下过程,用于返回报价系统每个报价中的金额。每个报价都有组,这些组又有部分: USE [My_DB_Name] GO DECLARE @QuoteNumberID int; SELECT @QuoteNumberID = QuoteNumberId FROM [Quote].[Quote] WHILE @QuoteNumberID IS NOT NULL BEGIN

我有以下问题,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的值,并将其放入表中每个条目中名为QuoteAmount(money,allow nulls)的[Quote].[ZQuoteBackupGL117]备份表中的一个新字段中。稍后我还会在生产表上运行它。通常情况下,我会避免对此使用循环,但此查询只运行一次以填充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

但我不会在这上面下任何赌注。

显然,您应该使用insert或update语句而不是循环来实现这一点。您没有显示示例中正在使用update或insert语句的任何位置,因此我不知道您实际上在尝试执行什么。@Hogan已更新,以更好地说明我正在尝试执行的操作。内部查询是否为单个QuoteNumberID返回多行?也就是说,您是否正在尝试跨多个部分生成报价总额?看起来您正在插入到您从中选择的同一个表中:
internal JOIN[Quote]。[zquotebackgl117]q ON g.QuoteID=q.QuoteID
您是否正在尝试插入一条新记录,该记录与具有相同QuoteID的现有记录分开,或者您只是想更新现有记录QuoteAmount?@AaronLS正在尝试更新现有条目。是的,内部查询应该根据每个QuoteNumberID的多个部分生成总计,组作为中介,因为部分与组和与引号关联的组相关联,但部分不直接与引号关联。这仅适用于引号上有一个部分的情况,但这是一个良好的开端,谢谢。@DarthVis17-你什么意思。。它缺了什么零件?是否要在Inner查询中按QuoteID创建group by?