【问题标题】:SQL Server 2012 : update a column based on min value from another table's columnSQL Server 2012:根据另一个表列的最小值更新列
【发布时间】:2015-06-04 02:29:15
【问题描述】:
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 值列,以便该值与表 A 中的 min(numb) 相同。 预期结果 : TblB

id value 
1   24
2   12

谢谢!

【问题讨论】:

    标签: sql-server sql-update min


    【解决方案1】:
    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
    

    【讨论】:

    • 如果我们每个 id 有不同的 numbs,这将有效。这是极不可能的。需要更强大的解决方案。
    【解决方案2】:
    ;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
    

    【讨论】:

    • @user3294322 现在尝试我已经解决了这个问题。
    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2021-03-27
    • 2017-07-24
    • 2019-08-20
    • 1970-01-01
    相关资源
    最近更新 更多