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
但我不会赌钱。
我有以下问题,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
但我不会赌钱。