Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除重复项-SQL server 2000-2005_Sql_Sql Server_Tsql_Sql Server 2000 - Fatal编程技术网

删除重复项-SQL server 2000-2005

删除重复项-SQL server 2000-2005,sql,sql-server,tsql,sql-server-2000,Sql,Sql Server,Tsql,Sql Server 2000,仅适用于通过SQL查询的MSSQL 2000-2005,无存储过程 无光标和临时表 桌子 create table my_table ( row_id int identity(1,1), _key varchar(20), _total decimal(18,2) ) 插入数据 insert into my_table (_key,_total) Values('qwe',10) insert into my_table(_key,_total) Values ('qwe',10) inse

仅适用于通过SQL查询的MSSQL 2000-2005,无存储过程

无光标和临时表

桌子

create table my_table
(
row_id int identity(1,1),
_key varchar(20),
_total decimal(18,2)
)
插入数据

insert into my_table (_key,_total) Values('qwe',10)
insert into my_table(_key,_total) Values ('qwe',10)
insert into my_table(_key,_total) Values ('asd',10)
insert into my_table(_key,_total) Values('asd',10)
insert into my_table(_key,_total) Values('zxc',10)
insert into my_table(_key,_total) Values('zxc',10)
insert into my_table(_key,_total) Values('qwe',100)
insert into my_table(_key,_total) Values('qwe',100)
insert into my_table(_key,_total) Values('asd',100)
insert into my_table(_key,_total) Values('asd',100)
insert into my_table(_key,_total) Values('zxc',100)
insert into my_table(_key,_total) Values('zxc',100)
insert into my_table(_key,_total) Values('qwe',50)
insert into my_table(_key,_total) Values('qwe',50)
insert into my_table(_key,_total) Values('asd',50)
insert into my_table(_key,_total) Values('asd',50)
insert into my_table(_key,_total) Values('zxc',50)
insert into my_table(_key,_total) Values('zxc',50)
我需要按_键字段删除重复项,并保留最大_总数的行以及其中最大的行id

我需要得到这个结果集

8 qwe 100.00
10 asd 100.00
12 zxc 100.00

如果你先用通俗易懂的语言表达你想要的东西,那就容易多了

  • 查找每个行的最大id(每个键的最大总数)
…变成了

  • 查找每个键的最大总数
  • 返回并查找每个(键,最大(总数))组合的最大行\u id
我没有运行这个。。。我会把它留给你去寻找任何缺少的逗号等

SELECT
    MAX(row_id) AS MaxRowid, M._key, M._total
FROM
    (
    SELECT 
        _key, max(_total) AS TTotal
    FROM
        my_table
    GROUP BY
        _key
    ) foo
    JOIN
    my_table M ON foo._key = M._key AND foo.TTotal = M._total
GROUP BY
    M._key, M._total
对于SQLServer2005+来说,我可以使用CTE来实现多样化

;WITH cFoo AS
(
   SELECT
      row_id, _key, _total, 
      ROW_NUMBER() OVER (PARTITION BY _key ORDER BY _total DESC, row_id DESC) AS bar
)
SELECT
    row_id, _key, _total
FROM
    cFoo
WHERE
    bar = 1

要删除它们,我认为“删除重复项”的意思是:

选择您列出的行的查询是:

  SELECT MAX(x.row_id),
         x._key,
         x._total
    FROM dbo.my_table x
    JOIN (SELECT _key,
                 MAX(_total) AS max_total
            FROM dbo.my_table
        GROUP BY _key) y ON y._key = x._key
                      AND y.max_total = x._total 
GROUP BY x._key, x._total

您可以通过使用两个查询来实现这一点:

--Delete all lesser total duplicates
delete T1
from My_Table T1, My_Table T2
where T1._key = T2._key
and T1._total < T2._total

--Delete all equal total with lesser row_id duplicates
delete T1
from My_Table T1, My_Table T2
where T1._key = T2._key
and T1.row_id < T2.row_id
——删除所有较小的总重复项
删除T1
从我的表T1,我的表T2
其中T1.\u键=T2.\u键
T1._总计
SQL Server 2000还是2005?这会对解决方案产生巨大的影响。我忘记了一件事——我需要按_键字段删除重复的行,并保留最大的_total行和其中最大的row_id行。如何删除这些行?
--Delete all lesser total duplicates
delete T1
from My_Table T1, My_Table T2
where T1._key = T2._key
and T1._total < T2._total

--Delete all equal total with lesser row_id duplicates
delete T1
from My_Table T1, My_Table T2
where T1._key = T2._key
and T1.row_id < T2.row_id