2

我有一个日志表,其中包含多行添加状态(“ status = 0”表示“添加”)。

怎么去掉status = 0但是必须是不重复的值。例如,每个事务 id (tid) 必须只有一个带有 的值status = 0

例如;

id tid       tblname           type     status 
1   101     x                   U              0
2   101     x                   U              0
3   102     x                   U              0
4   102     x                   U              0
5   102     x                   U              0

必须返回:

id  tid     tblname       type           status 
1   101     x            U              0
3   102     x            U              0

我怎样才能做到这一点?

4

1 回答 1

2

使用 cte 和ROW_NUMBER

WITH x AS (SELECT rn = Row_number() 
                       OVER( 
                         partition BY tid 
                         ORDER BY id) 
         FROM   dbo.log
         WHERE  status = 0 
                AND tblname = 'X' 
                AND type = 'U') 
DELETE FROM  x 
WHERE  rn > 1 
于 2013-01-31T12:11:04.757 回答