2013-05-12 60 views
0

我遇到问题:我试图完全更新SQL Server 2012中的临时表(在存储过程中),但它只更新与我的描述相匹配的第一个条目。下面是代码:完全更新临时表SQL

create table #t (store_name varchar(30), 
       product_name varchar(30), 
       price int, 
       valab_since date, 
       valab_until date, 
       best_offer varchar(3)) 

--some code that populates my table 

update #t set best_offer = 'yes' 
where price = (select min(price) from Cataloage as c 
       INNER JOIN Produse as p 
       on c.codP = p.codP 
       where p.denumire = #t.store_name) 
update #t set best_offer = 'no' 
where price > (select min(price) from Cataloage as c 
       INNER JOIN Produse as p 
       on c.codP = p.codP 
       where p.denumire = #t.product_name) 

select * from #t 

CataloageProduse是一些表,我使用。

回答

0

要覆盖所有记录,首先将它们全部设置为“否”,然后运行单独的查询,以便用商店的最低价格更新那些记录。

update #t set best_offer = 'no'; 

;with t as (
    select *, rnk = dense_rank() over (partition by t.store_name order by price asc) 
    from Cataloage c 
    join Produse p on c.codP = p.codP 
    join #t t on p.denumire = t.store_name 
) 
update t 
set best_offer = 'yes' 
where rnk = 1; 

我已经使用了DENSE_RANK和一个公用表表达式来替代您的逐行子查询。

+0

感谢您的及时回复。我不得不做一些小的修改,但基本上它做到了。 – 2013-05-13 20:20:17