查询??

goldocean 2003-10-12 05:21:32
表:
id je flag
100 100 1
100 100 -1
100 100 1
100 222 1
100 555 1
120 123 1
123 11 1

我想得到
表:
id je flag
100 100 1
100 222 1
100 555 1
120 123 1
123 11 1
即过滤掉 flag=-1 的以及它对应的flag=1的je相同的那条记录,但是还有一个flag=1的记录需要留下.
各位帮帮忙.
谢谢
...全文
25 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenyubang 2003-10-13
  • 打赏
  • 举报
回复
加了别的字段都一样嘛,都是在"SELECT "加上"DISTINCT"就行了,即是
SELECT DISTINCT * FROM..........
orcale 2003-10-13
  • 打赏
  • 举报
回复
create table #t
(aid int identity(1,1),id int,je int,flag int,state int)
insert #t values(100,100,1,1)
insert #t values(100,100,-1,2)
insert #t values(100,100,1,4)
insert #t values(100,222,1,8)
insert #t values(100,555,1,0)
insert #t values(120,123,1,1)
insert #t values(123,11,1,1)
select a.id,a.je,a.flag from (select * from #t where flag<>-1) a group by a.id,a.je,a.flag
drop table #t
angelgundam 2003-10-13
  • 打赏
  • 举报
回复
如果阁下所要的表中id和je的位置可以调换的话,我还有一种方法:
select distinct je,id,flag
from biao
where flag!=-1
order by id asc

asc也可以不要,因为没注明的话,系统会默认为升序排列,结果一样。
je id flag
100 100 1
222 100 1
555 100 1
123 120 1
11 123 1
angelgundam 2003-10-13
  • 打赏
  • 举报
回复
假设表名为:biao
select distinct *
from biao
where flag!=-1
gmlxf 2003-10-12
  • 打赏
  • 举报
回复
你可以为增加个临时表,加一个字段identity:
select identity(int,1,1) aid,* into #T from 表
select a.id,a.je,a.flag,a.state from #T a where
aid in (select max(aid) from #T where flag<>-1 group by je)
drop table #T

不过这样取得的是max(aid)对应的那条记录。
gmlxf 2003-10-12
  • 打赏
  • 举报
回复
实验如下:
--drop table #t
create table #t
(aid int identity(1,1),id int,je int,flag int,state int)
insert #t values(100,100,1,1)
insert #t values(100,100,-1,2)
insert #t values(100,100,1,4)
insert #t values(100,222,1,8)
insert #t values(100,555,1,0)
insert #t values(120,123,1,1)
insert #t values(123,11,1,1)
select a.id,a.je,a.flag,a.state from #t a
select a.id,a.je,a.flag,a.state from #t a where
aid in (select max(aid) from #t where flag<>-1 group by je)
gmlxf 2003-10-12
  • 打赏
  • 举报
回复
没有唯一性的数据字段吗?
如果有就简单了。
没有可以再插入一个identity解决。
etinka 2003-10-12
  • 打赏
  • 举报
回复
前几天也碰到一样的问题,在SQL语句上一直无法解决,
后来用以下方法解决,也许可供参考:
1.先用SELECT语句把所有记录都取出并排序
所得结果为:
ID
100 100 1
100 100 -1
100 100 1
100 222 1
100 555 1
120 123 1
123 11 1

2. 在程序中做一个循环,把RecordSET中的数据读出,并对当前的ID和FLAG的值与下一个ID和FLAG的值进行比较,从而组成楼主想要的第二个表中的数据.
goldocean 2003-10-12
  • 打赏
  • 举报
回复
TO:friendliu(无为)
state是没有规律的.不是自动增加的.
goldocean 2003-10-12
  • 打赏
  • 举报
回复
是的.
我先插入了一条记录A1,而后发现记录A1输入错误,我又开插入一条记录B1,flag=-1其他字段与A1一样,而后又输入一个正确的记录C1,C1的记录有些字段不一致,但可能金额(je)是与A1一致的.
friendliu 2003-10-12
  • 打赏
  • 举报
回复
select id,je,flag,max(state) where flag=1
a1n1 2003-10-12
  • 打赏
  • 举报
回复
要求看不太懂啊:即过滤掉 flag=-1 的以及它对应的flag=1的je相同的那条记录,但是还有一个flag=1的记录需要留下.
goldocean 2003-10-12
  • 打赏
  • 举报
回复
我想返回所以的字段
a1n1 2003-10-12
  • 打赏
  • 举报
回复
SELECT DISTINCT je FROM tablename WHERE flag <> -1
goldocean 2003-10-12
  • 打赏
  • 举报
回复
我的表还有别的字段,比如:再加一个字段
id je flag state
100 100 1 1
100 100 -1 2
100 100 1 4
100 222 1 8
100 555 1 0
120 123 1 1
123 11 1 1

我向得到
表:
id je flag state
100 100 1 4
100 222 1 8
100 555 1 0
120 123 1 1
123 11 1 1
即过滤掉 flag=-1 的以及它对应的flag=1的je相同的那条记录,但是还有一个flag=1的记录需要留下.
dgljf 2003-10-12
  • 打赏
  • 举报
回复
SELECT DISTINCT * FROM t! WHERE flag<>-1

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧