比如上面有<状态>是'y'数据: 2013-8-26 乙 0 **** y ,那么对应于这条数据的 相同时间、相同大类的数据为:2013-8-26 乙 2 **** a 和 2013-8-26 乙 3 **** c , 那么这两条数据的<状态>就要全部当做‘y’来处理,查询条件里要是有y,那么它们一起要显示(并且状态也要设置为y),如果查询条件里是a或b,它们应该不显示出来(因为已经把这两条数据的状态当做y来处理了)
select * from tb a where 状态='y' or exists(select 1 from (select * from tb where 小类='0' and 状态='y')b where a.时间=b.时间 and a.大类=b.大类 )
select * from t where t.[小类] != 0 and [状态]='y' union select t.[时间],t.[大类],t.[小类],t.[名称],'y' as [状态] from ( select * from t where t.[小类] = 0 ) t1 inner join t on t1.[时间]=t.[时间] and t1.[大类] = t.[大类]
from 表 a
where 状态='y' or
exists(select 1 from 表 b where b.状态='y' and b.小类=0 and a.时间=b.时间 and a.大类=b.大类)
FROM TB
WHERE 大类 IN (
SELECT 大类
FROM TB
WHERE 状态='y')--状态列加上索引
2013-8-26 乙 3 **** c , 那么这两条数据的<状态>就要全部当做‘y’来处理,查询条件里要是有y,那么它们一起要显示(并且状态也要设置为y),如果查询条件里是a或b,它们应该不显示出来(因为已经把这两条数据的状态当做y来处理了)
select *
from tb a
where 状态='y' or
exists(select 1
from (select * from tb where 小类='0' and 状态='y')b
where a.时间=b.时间 and a.大类=b.大类
)
select * from t where t.[小类] != 0 and [状态]='y'
union
select t.[时间],t.[大类],t.[小类],t.[名称],'y' as [状态] from
(
select * from t
where t.[小类] = 0
) t1 inner join t
on t1.[时间]=t.[时间] and t1.[大类] = t.[大类]