删除同一列中的数据

时间:2016-10-04 21:23:24

标签: sql sql-server-2008

我不知道如何解释我的问题所以我正在显示样本数据。

我有下表

---------------------------------
|RecID |TypeOfData  |Data       |
|21    |Label       |Name       |
|21    |Data        |Sam        |
|22    |Label       |Name       |
|23    |Label       |Name       |
|23    |Data        |Nimble     | 

我想删除所有那些没有数据的Label记录。 因此,在上面的示例中,需要删除RecID = 22。

请帮助我。

Db是SQL Server 2008.

3 个答案:

答案 0 :(得分:1)

这是你想要的吗?

delete t
    from t
    where t.typeofdata = 'Label' and
          not exists (select 1
                      from t t2
                      where t2.recid = t.recid and t2.typeofdata = 'Data'
                     );

“下方”并不代表关系表中的任何内容,因为该表代表无序集。

答案 1 :(得分:1)

可能是您可以使用Rec_id的计数为= 1

的子选择
  delete from my_table 
  where Rec_id in (select RecID from my_table 
                   group by RecId 
                   having count(*) =1)
 and TypeOdData = 'Label' 

答案 2 :(得分:0)

WITH CTE(TypeOfData, Data, Rn) 
AS
(
SELECT [TypeOfData], [Data], 
    RN = ROW_NUMBER() OVER(PARTITION BY TypeOfData, DATA ORDER BY TypeOfData,Data)
FROM tbl
WHERE TypeOfData ='label'
)
DELETE FROM CTE WHERE RN > 1