+ -
当前位置:首页 → 问答吧 → 高分求一句sql同时实现下面两个需求?在线等

高分求一句sql同时实现下面两个需求?在线等

时间:2011-12-03

来源:互联网

数据库表中可能会存在有如下两条数据:
SQL code

FIndex   FID   FChangeID   FCloseFlag 
   1     100     150           0
   2     100     0             0


或者
SQL code

FIndex   FID   FChangeID   FCloseFlag 
   1     100     150           0
   2     100     0             1



整体来看,就是两条数据的FCloseFlag和FChangeID不一样而已
现在要求写一条sql语句,同时满足需求:
1、当存在FCloseFlag=1的时候,只查询出FIndex=1的数据行
2、当存在FClaseFlag=0的时候,只查询出FIndex=2的数据行

作者: lybjust   发布时间: 2011-12-03

SQL code

select *
from tb
where (FClostFlag = 1 and FIndex = 1) or (FCloseFlag = 0 and FIndex = 2)

作者: AcHerat   发布时间: 2011-12-03

或者分别求出来结果集union all

作者: AcHerat   发布时间: 2011-12-03

如果从楼主的叙述上看,并未排除 FClostFlag 不为 0 和 1 的状态.
SQL code
SELECT * FROM TB WHERE FClostFlag=1 and FIndex=1 or FClaseFlag=0 and FIndex=2 or FCloseFlag<>1 and FCloseFlag<>0

作者: qianjin036a   发布时间: 2011-12-03

与操作优先级高于或操作,不用括号.

作者: qianjin036a   发布时间: 2011-12-03

引用 3 楼 qianjin036a 的回复:

如果从楼主的叙述上看,并未排除 FClostFlag 不为 0 和 1 的状态.
SQL code
SELECT * FROM TB WHERE FClostFlag=1 and FIndex=1 or FClaseFlag=0 and FIndex=2 or FCloseFlag<>1 and FCloseFlag<>0


请不要把FIndex考虑进去,这里FIndex可能是一个自增主键而已,只是为了说明取第几行数据才描述了
FIndex,谢谢哈


作者: lybjust   发布时间: 2011-12-03

引用 1 楼 acherat 的回复:

SQL code

select *
from tb
where (FClostFlag = 1 and FIndex = 1) or (FCloseFlag = 0 and FIndex = 2)


请不要把FIndex考虑进去,这里FIndex可能是一个自增主键而已

而且试了这个,好像没有效果

作者: lybjust   发布时间: 2011-12-03

select *
from tb
where FClostFlag = ?

?表示你输入的 FCloseFlag 的值。

作者: AcHerat   发布时间: 2011-12-03

题意不明。。。

作者: yudiw   发布时间: 2011-12-03

SQL code
select distinct b.* from tb a
cross apply(select top 1 * from tb where FID=a.FID order by FCloseFlag desc,FIndex desc) b

作者: ssp2009   发布时间: 2011-12-03