我找到了几个类似的线程但没有一个只有一个表。基本上我们在报价系统上做了一些更新,找不到报价修订历史,因为它存储的唯一地方是“priorquoteID”。我编写了一个SQL存储过程,遍历并遍历了所有先前的引号,并设置了一个我创建的新字段,名为“OriginalQuoteID”,等于最旧的引号,并将最新的引用设置为“CurrentQuote”。
然而,大约2/3的引号从未修改过,所以我的SQLProcedure没有处理。从概念上讲,我需要一些像这样的东西:
update
SalesQuotesTest.dbo.Quote
set CurrentQuote = 1
group by OriginalQuoteID
having COUNT(*) < 2
所以任何没有修订的引用(是修订线程中的唯一引用)我可以标记为当前。
这有意义吗?有什么想法吗?
答案 0 :(得分:1)
尝试下面的更新(带有分组依据的内联视图用于过滤要更新的行):
update q
set q.CurrentQuote = 1
from SalesQuotesTest.dbo.Quote q
join (
select OriginalQuoteID
from SalesQuotesTest.dbo.Quote
group by OriginalQuoteID
having COUNT(*) < 2
) s
on q.OriginalQuoteID = s.OriginalQuoteID
答案 1 :(得分:1)
您可以使用子查询:
update
SalesQuotesTest.dbo.Quote
set CurrentQuote = 1
where OriginalQuoteID in ( select OriginalQuoteID
from SalesQuotesTest.dbo.Quote
group by OriginalQuoteID
having COUNT(*) < 2
)
答案 2 :(得分:1)
这是完全未经测试的,但这是我的建议。进行适合您的架构所需的任何更改。
WITH quotesToUpdate(QuoteId) AS (
SELECT Quote.Identifier
FROM SalesQuotesTest.dbo.Quote
GROUP BY OriginalQuoteID HAVING COUNT(*) < 2
)
UPDATE SalesQuotesTest.dbo.Quote
SET CurrentQuote = 1
FROM SalesQuotesTest.dbo.Quote q
INNER JOIN quotesToUpdate qu ON q.Identifier = qu.QuoteId