2015-03-30 144 views
1
CREATE TABLE #TBLA (id int, numb int, value int) 
INSERT INTO #TBLA 
VALUES (1,3,24), 
     (1,4,14), 
     (2,2,61), 
     (2,1,12),  
     (2,3,54) 



CREATE TABLE #TBLB (ID int, Value int) 
INSERT INTO #TBLB (ID) 
VALUES (1),(2) 

我想更新#TBLB值列,这样的价值是eual从表A. 预期结果最小(麻木): TblBSQL Server 2012中:基于另一个表中的列最小值更新列

id value 
1 24 
2 12 

谢谢!

回答

0
UPDATE #TBLB 
SET Value = A.value 
FROM #TBLA A 
JOIN 
(select B.ID, min(A.numb) as mi 
from #TBLA A 
join #TBLB B ON a.id = B.id 
GROUP BY B.ID) res 
ON A.id = res.ID and a.numb = res.mi 
+0

这工作,如果我们每个ID不同的麻木。这是极不可能的。需要更强大的解决方案 – user3294322 2015-03-30 22:15:47

0
;WITH CTE 
AS (
    SELECT * 
     ,ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Numb ASC) rn 
    FROM #TBLA 
    ) 
UPDATE B 
SET B.Value = C.value 
FROM #TBLB B 
INNER JOIN CTE C ON B.ID = C.id AND C.rn = 1 
+0

抱歉,这不起作用。 – user3294322 2015-03-30 22:15:59

+0

@ user3294322现在试试我已经解决了这个问题。 – 2015-03-30 22:30:45

相关问题