如果另一列匹配,如何使用该组的第一个值更新行?

时间:2016-06-15 15:18:58

标签: sql sql-server-2014

我的问题很简单,我们尝试的所有查询都出错了。我是新手用户,我还在学习SQL语言,任何帮助都将非常感激。

我尝试将表格更新到费率列与Mat ID匹配的位置,并使用该分组中的第一个值进行更新。

+------+--------+
| Rate | Mat ID |
+------+--------+
| 1    | 81     |
| 2    | 82     |
| 2    | 83     |
| 3    | 85     |
| 2    | 86     |
| 2    | 87     |
| 3    | 88     |
+------+--------+

预期结果:

+------+--------+
| Rate | Mat ID | 
+------+--------+
| 1    | 81     |
| 2    | 82     |
| 2    | 82     |
| 3    | 85     |
| 2    | 82     |
| 2    | 82     |
| 3    | 85     |
+------+--------+

1 个答案:

答案 0 :(得分:1)

假设如下:

  • 您对第一个'的定义表示每个分组的最小值。
  • 预期结果最后一行的拼写错误应该是85而不是88

以下UPDATE声明符合您的要求:

;
WITH    CTE_MinMatID
          AS (
              SELECT    Rate,
                        MIN(MatID) MinMatID
              FROM      @table
              GROUP BY  Rate
             )
    UPDATE  t
    SET     t.MatID = cte.MinMatID
    FROM    @table AS t
    INNER JOIN CTE_MinMatID cte ON cte.Rate = t.Rate;

Working example here