sql语句。关于group by 和where之间取个中立点。

renaski 2004-08-15 07:45:51
想得到table1中date1大于今天的,sex的个数和值。且idDel=0

select count(sex) as sex ,sex ,date1 from table1
group by sex,isDel ,date1
having isDel=0 and date1 > getdate()

我用这种方法的话,他连date1也一起group了,
要的是这样
select count(sex) as sex ,sex ,date1 from table1
group by sex
where isDel=0 and date1 > getdate()

可惜没有这种写法的。

再次请教了。谢谢!
...全文
138 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangzs8896 2004-08-15
  • 打赏
  • 举报
回复
楼主,你要看好我的给的实验数据,满足条件的应该是2个男的,1个女的
zhangzs8896 2004-08-15
  • 打赏
  • 举报
回复
create table tb(date1 datetime,sex varchar(4),isDel int)
insert tb values('2005-01-02','男',0)
insert tb values('2005-02-02','男',1)
insert tb values('2005-03-02','女',0)
insert tb values('2005-04-02','男',0)
insert tb values('2001-01-02','男',0)


select distinct 个数=case when sex='男' then (select count(sex) as sex from tb
where isDel=0 and date1>getdate() and sex='男' )else (select count(sex) as sex from tb
where isDel=0 and date1>getdate() and sex='女') end ,
sex
from tb
where isDel=0 and date1>getdate()
order by sex

drop table tb

--结果

个数 sex
----------- ----
2 男
1 女
renaski 2004-08-15
  • 打赏
  • 举报
回复
错了,没有细看。

结果应该是这样。
个数 sex
----------- ----
3 男
1 女
renaski 2004-08-15
  • 打赏
  • 举报
回复
不行,还是有聚合。
数量多一点的话,问题就出来了。

要这样的结果

---结果

个数 sex
----------- ----
3 男
3 女


PS:这个可以解决,order by 一下就可以。但不知道有没有什么更好的办法。
zhangzs8896 2004-08-15
  • 打赏
  • 举报
回复
--测试(不知道你是不是要这种)
create table tb(date1 datetime,sex varchar(4),isDel int)
insert tb values('2005-01-02','男',0)
insert tb values('2005-02-02','男',1)
insert tb values('2005-03-02','女',0)
insert tb values('2005-04-02','男',0)
insert tb values('2001-01-02','男',0)


select 个数=(select count(sex) as sex from tb
where isDel=0 and date1>getdate()),sex
from tb
where isDel=0 and date1>getdate()


drop table tb

---结果

个数 sex
----------- ----
3 男
3 女
3 男

(所影响的行数为 3 行)
renaski 2004-08-15
  • 打赏
  • 举报
回复
但是如果已经count 了sex 了,再要日期就没有意义了啊?

回:想得到在今天日期后的所有人数。
renaski 2004-08-15
  • 打赏
  • 举报
回复
count是不行的,建议先试一下。
woshishui11121113 2004-08-15
  • 打赏
  • 举报
回复
这个不行,呵呵

刚实验了

但是如果已经count 了sex 了,再要日期就没有意义了啊?

woshishui11121113 2004-08-15
  • 打赏
  • 举报
回复
如果都要的话
select count(sex) as sex ,sex ,date1 from table1

where isDel=0 and date1 > getdate()
renaski 2004-08-15
  • 打赏
  • 举报
回复
1楼的错误就是
我那个
“可惜没有这种写法的。”

4楼的谢了,可惜不是我要的。而且你缺个from
woshishui11121113 2004-08-15
  • 打赏
  • 举报
回复
如果不用取日期的话:
select count(sex) as sex
where isDel=0 and date1 > getdate()

group by sex
woshishui11121113 2004-08-15
  • 打赏
  • 举报
回复
错了,sorry
woshishui11121113 2004-08-15
  • 打赏
  • 举报
回复
select count(sex) as sex ,sex ,date1 from table1
where isDel=0 and date1 > getdate()

group by sex
张海霖 2004-08-15
  • 打赏
  • 举报
回复
select count(sex) as sexcount ,sex ,date1 from table1
group by sex
where isDel=0 and date1 > getdate()

34,588

社区成员

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

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