SQL Server更新列组

时间:2012-04-11 00:49:59

标签: sql sql-server group-by

表A

int  class del
null  13
null  13
null  13
12    13
null  23
null  23
null  87
null  74
null  74
null  65
32    65

所以,我想填充del ='A',对于给定的类,其所有int都为null,否则它应该填充B。

预期结果:

表A

int  class del
null  13    B
null  13    B
null  13    B
12    13    B
null  23    A
null  23    A
null  87    A
null  74    A
null  74    A
null  65    B
32    65    B

2 个答案:

答案 0 :(得分:2)

update
    TableA
set
    del = Case
            when mcolint is null Then 'A'
            Else 'B'
    End
from
    TableA T
inner join
    (
        select
            class,
            MAX(colint) mcolint
        from
            TableA
        group by
            class
    ) T1
on
    T.class = T1.class

答案 1 :(得分:2)

在SQL Server 2005+中,您可以执行以下操作:

WITH calcDelValue AS (
  SELECT
    *,
    CASE
      WHEN MAX(int) OVER (PARTITION BY class) IS NULL THEN 'A'
      ELSE 'B'
    END AS Value
  FROM TableA
)
UPDATE calcDelValue
SET del = Value

有关窗口聚合函数的更多信息,请参阅OVER Clause (Transact-SQL),有关 CTE(公用表格式)的信息,请参阅WITH common_table_expression (Transact-SQL)