求助:sql查询

破Feel 2013-09-11 11:24:51


如上示例,目的是想查询状态为‘y’的数据,但是如果有小类‘0’的数据状态为‘y’的,那么对应 相同时间 相同大类 的所有数据状态都是‘y’,数据量比较大,考虑性能,如何做sql
多谢了
...全文
198 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy__Huang 2013-09-11
  • 打赏
  • 举报
回复

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.大类
		)
破Feel 2013-09-11
  • 打赏
  • 举报
回复
再次谢谢大家
破Feel 2013-09-11
  • 打赏
  • 举报
回复
比如上面有<状态>是'y'数据: 2013-8-26 乙 0 **** y ,那么对应于这条数据的 相同时间、相同大类的数据为:2013-8-26 乙 2 **** a 和 2013-8-26 乙 3 **** c , 那么这两条数据的<状态>就要全部当做‘y’来处理,查询条件里要是有y,那么它们一起要显示(并且状态也要设置为y),如果查询条件里是a或b,它们应该不显示出来(因为已经把这两条数据的状态当做y来处理了)
破Feel 2013-09-11
  • 打赏
  • 举报
回复
不好意思,我再好好表达一下,简单的说,就是根据状态查询数据,状态可能会是多个(上面的图示只查询一个状态y), 复杂的地方是要求 如果有数据:小类是‘0’,状态是‘y’,那么对应这条数据的相同时间、相同大类下的所有数据,不管状态是什么,都当做 状态是‘y’来处理
苦逼的程序员 2013-09-11
  • 打赏
  • 举报
回复
LZ字面意思和图对不上啊
Andy__Huang 2013-09-11
  • 打赏
  • 举报
回复
如果有小类‘0’的数据状态为‘y’的,那么对应 相同时间 相同大类 的所有数据状态都是‘y’, 这句话什么理解?
發糞塗牆 2013-09-11
  • 打赏
  • 举报
回复
SELECT 时间,大类,小类,名称,CASE WHEN 小类=0 THEN 'y' ELSE 状态 END 状态
FROM TB
WHERE 大类 IN (
SELECT 大类
FROM TB
WHERE 状态='y')--状态列加上索引
lzw_0736 2013-09-11
  • 打赏
  • 举报
回复
select * from 表 a where 状态='y' or exists(select 1 from 表 b where b.状态='y' and b.小类=0 and a.时间=b.时间 and a.大类=b.大类)
破Feel 2013-09-11
  • 打赏
  • 举报
回复
表达的有点不清,把那个“但是” 去掉,就能读通顺了
破Feel 2013-09-11
  • 打赏
  • 举报
回复
sorry,好像不是我想要的结果,不能把状态强制设置为y,假如条件是查询状态是'a'或'y'的,那是不是就不可以了
破Feel 2013-09-11
  • 打赏
  • 举报
回复
谢谢,但是状态没有置为y呀
KeepSayingNo 2013-09-11
  • 打赏
  • 举报
回复

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.[大类]

34,588

社区成员

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

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