Tsql T-SQL使用While循环填充列
我有以下问题,SQL还不是我最强的技能。我在SQL Server 2014中有以下过程,用于返回报价系统每个报价中的金额。每个报价都有组,这些组又有部分: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
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?