2014-11-26 2 views
0

Я нашел пару похожих тем, но ни один из них не состоял всего из 1 таблицы. В основном мы делаем некоторые обновления в нашей системе Quote, и нет отличного способа найти историю пересмотра цитаты, так как единственным местом, где он хранится, является «beforequoteID». Я написал хранимую процедуру SQL, которая прошла и прошла все предыдущие кавычки, и установила новое созданное мной поле под названием «OriginalQuoteID», равное самой старой цитате, и установило самую последнюю цитату как «CurrentQuote».Обновление с использованием GROUP по

Однако около 2/3 кавычек никогда не пересматривались, поэтому мои SQLProcedure не обрабатывались. Концептуально мне нужно что-то, что работает так:

update 
SalesQuotesTest.dbo.Quote 
set CurrentQuote = 1 
group by OriginalQuoteID 
having COUNT(*) < 2 

Поэтому любые цитаты, которые не имеют ревизии (это единственная цитата ревизионной нити) я могу отметить, как ток.

Имеет ли это смысл? Есть идеи?

+0

.dbo предлагает MS SQL Server, правильно? –

+0

не уверен, что я понимаю, о чем вы спрашиваете. Если вы уже правильно отметили кавычки с предыдущими версиями, то это означает, что остальные 2/3s кавычек (без изменений) являются текущими, поэтому должны иметь CurrentQuote = 1? – StevieG

ответ

1

Вы можете использовать подзапрос для этого:

update 
SalesQuotesTest.dbo.Quote 
set CurrentQuote = 1 
where OriginalQuoteID in (select OriginalQuoteID 
          from SalesQuotesTest.dbo.Quote 
          group by OriginalQuoteID 
          having COUNT(*) < 2 
         ) 
+0

Работал как очарование, спасибо! – bvankampen

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

Это совершенно непроверено, но вот мое предложение. Внесите любые изменения, необходимые для вашей схемы.

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 
Смежные вопросы