点记录表主键 点编号 X Y
1 AAA 100 100
2 AAA 100 100
3 BBB 1 2
4 CCC 100 100
合理的数据应该是,只要x,y值一样,点编号就应该一样,可能由于某些错误录入,导致4这条记录的编号和1、2不一样现在想以点的x,y值一样的分组,分的组里,所有记录是编号的去除,只留下编号不一样的那些组。
1 AAA 100 100
2 AAA 100 100
3 BBB 1 2
4 CCC 100 100
合理的数据应该是,只要x,y值一样,点编号就应该一样,可能由于某些错误录入,导致4这条记录的编号和1、2不一样现在想以点的x,y值一样的分组,分的组里,所有记录是编号的去除,只留下编号不一样的那些组。
解决方案 »
- 求助mysql多表查询问题
- 怎样写 一句SQL语句 ,可以同时删除两个表的记录 ? 条件相同
- 兄弟们有这个问题吗? 一启动sql server,无线网络就断开啦!
- 用什么的数据类型能实现真实的统计?????????????????
- 这样SQL备份数据行不?
- 奇怪!非索引字段的查询问题,索引不起左右!请看看!
- The data types ntext and varchar are incompatible in the equal to operator.
- 高手帮忙,很简单的问题撒分了!!!!
- 数据升迁问题--请指教----在线等待
- 接口程序有问题:如果pb和sql server的专用接口被破坏或者版本较低---这个问题请教高手!!!
- order by (select 1))是什么意思?
- SELECT 统计 写法,在线等。
--> 测试数据:[test]
if object_id('[test]') is not null
drop table [test]
go
create table [test](
[主键] int,
[点编号] varchar(3),
[X] int,
[Y] int
)
insert [test]
select 1,'AAA',100,100 union all
select 2,'AAA',100,100 union all
select 3,'BBB',1,2 union all
select 4,'CCC',100,100
go;with t
as(
select *,px=row_number()over(partition by [点编号],[X],[Y] order by (select 1))
from test
)select [主键],[点编号],[X],[Y] from t where px=1/*
[主键] [点编号] [X] [Y]
------------------------------------
1 AAA 100 100
3 BBB 1 2
4 CCC 100 100
*/
--> 测试数据:[test]
if object_id('[test]') is not null
drop table [test]
go
create table [test](
[主键] int,
[点编号] varchar(3),
[X] int,
[Y] int
)
insert [test]
select 1,'AAA',100,100 union all
select 2,'AAA',100,100 union all
select 3,'BBB',1,2 union all
select 4,'CCC',100,100
go;with t
as(
select *,px=row_number()over(partition by [点编号],[X],[Y] order by (select 1))
from test
)select [主键],[点编号],[X],[Y] from t where px=1/*
[主键] [点编号] [X] [Y]
------------------------------------
1 AAA 100 100
3 BBB 1 2
4 CCC 100 100
*/
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([主键] INT,[点编号] VARCHAR(3),[X] INT,[Y] INT)
INSERT [tb]
SELECT 1,'AAA',100,100 UNION ALL
SELECT 2,'AAA',100,100 UNION ALL
SELECT 3,'BBB',1,2 UNION ALL
SELECT 4,'CCC',100,100
--------------开始查询--------------------------
--1
SELECT * FROM [tb] AS t WHERE 2>(SELECT count(*) FROM tb WHERE t.[X]=[X] AND t.[Y]=[Y] AND t.[点编号]=[点编号])----------------结果----------------------------
/*
主键 点编号 X Y
----------- ---- ----------- -----------
3 BBB 1 2
4 CCC 100 100(2 行受影响)
*/
--1
SELECT * FROM [tb] AS t WHERE NOT EXISTS(SELECT 1 FROM tb WHERE t.[X]=[X] AND t.[Y]=[Y] AND t.[点编号]=[点编号] AND [主键]<t.[主键])----------------结果----------------------------
/*
主键 点编号 X Y
----------- ---- ----------- -----------
1 AAA 100 100
3 BBB 1 2
4 CCC 100 100(3 行受影响)*/
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([主键] INT,[点编号] VARCHAR(3),[X] INT,[Y] INT)
INSERT [tb]
SELECT 1,'AAA',100,100 UNION ALL
SELECT 2,'AAA',100,100 UNION ALL
SELECT 3,'BBB',1,2 UNION ALL
SELECT 4,'CCC',100,100
--------------开始查询--------------------------
--1
SELECT * FROM [tb] AS t WHERE 2>(SELECT count(*) FROM tb WHERE t.[X]=[X] AND t.[Y]=[Y] AND t.[点编号]=[点编号])----------------结果----------------------------
/*
主键 点编号 X Y
----------- ---- ----------- -----------
3 BBB 1 2
4 CCC 100 100(2 行受影响)
*/
--1
SELECT * FROM [tb] AS t WHERE NOT EXISTS(SELECT 1 FROM tb WHERE t.[X]=[X] AND t.[Y]=[Y] AND t.[点编号]=[点编号] AND [主键]<t.[主键])----------------结果----------------------------
/*
主键 点编号 X Y
----------- ---- ----------- -----------
1 AAA 100 100
3 BBB 1 2
4 CCC 100 100(3 行受影响)*/
[/code]
这条,因为只有一条,所以它是"合理"的数据而
1 AAA 100 100
2 AAA 100 100
4 CCC 100 100
这三条,明明有相同的XY,却有了不同的点编号,这是不合理的数据,应该显示出来。