求一复杂SQL2005查询语句

闲游四疯 2008-07-10 11:00:16

供应信息表一些字段:
ID(主键) Val(有效期 int 值:10,20,30,90)
IsCheck(审核状态 int,1代表审核通过 0审核中 2代表审核不通过) PubTime(信息发布时间)
现在要查询每种审核状态共有多少条纪录?审核通过纪录分成已过期跟未过期
例结果:
ISCheck Cou --如无纪录则用0代替,就是说有可能审核不通过纪录为0,但也要显示出来,返回0
0 10 --审核中纪录(所有纪录)
1 300 --审核通过纪录,不包括已过期
2 20 --审核未通过纪录(所有纪录)
4 50 --过期纪录数(审核通过纪录中过期纪录 4为自已写值,数据库中不存在 )
过期就是指当前时间-发布时间>有效期天数
笨点的方法就是select count(*) from .. where ..一条一条查询出来,但我想知道有没有办法直接查询出来
...全文
227 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
JeffChung 2008-07-10
  • 打赏
  • 举报
回复
用union all,不难
wzy_love_sly 2008-07-10
  • 打赏
  • 举报
回复
select 0 as ischeck,count(1) as cou from tb where ischeck=0
union all
select 1 ,sum(case when dateadd(dd,val,pubtime)>getdate() then 1 else 0 end) from tb where ischeck=1 --未过期=发布时间+天数 大于当天就没有过期
union all
select 2,count(1) from tb where ischeck=2
union all
select 4 ,sum(case when dateadd(dd,val,pubtime)<getdate() then 1 else 0 end) from tb where ischeck=1 --已过期=发布时间+天数 大于当天就没有过期,不知道算不算当天
lishijie910123 2008-07-10
  • 打赏
  • 举报
回复
这种一般都需要用临时表
brz97 2008-07-10
  • 打赏
  • 举报
回复
不知道使用select ... case能不能做到
不过最明显的解决办法就是建立临时表
临时表结构
(
id,
isCheck,
isExpired--是否过期
)
wzy_love_sly 2008-07-10
  • 打赏
  • 举报
回复
写点数据和结果
闲游四疯 2008-07-10
  • 打赏
  • 举报
回复
。。。。。。
这我也知道。。关键是怎么让通过纪录过期跟未过期纪录分开。
brz97 2008-07-10
  • 打赏
  • 举报
回复
select count(*) from table group by(IsCheck)//根据审核状态分组查询
brooklyng60 2008-07-10
  • 打赏
  • 举报
回复
建临时表,每一种状态的结果直接插进去,然后查询临时表
给个邮箱发到你邮箱里面,我们现在的又个系统就是要根据时间来判断上报数据的状态的,一样的意思

62,133

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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