1

表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
4

2 回答 2

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
于 2012-04-11T01:06:16.603 回答
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 子句 (Transact-SQL),有关CTE(公共表表达式)的信息,请参阅WITH common_table_expression (Transact-SQL ) 。

于 2012-04-11T14:25:28.673 回答