sql怎么添加自定义列并且将此列的数据作为条件查询
有一个Warning表,表里面有Time和Num列,Time里面的日期不一定是连贯的,并且Time的日期可以重复现在我需要查询出一个表,第一列必须显示连贯的日期,比如1到...
有一个Warning表,表里面有Time和Num列,Time里面的日期不一定是连贯的,并且Time的日期可以重复
现在我需要查询出一个表,第一列必须显示连贯的日期,比如1到30号,每天都有
第二列显示对应日期产生的Num的总和,对应日期没有数据则显示0
因为第一列是表里面原本没有的,现在必须强行列出来,请问SQL的语句怎么写?
不要简写,我新手看不懂,要能直接查询的,谢了 展开
现在我需要查询出一个表,第一列必须显示连贯的日期,比如1到30号,每天都有
第二列显示对应日期产生的Num的总和,对应日期没有数据则显示0
因为第一列是表里面原本没有的,现在必须强行列出来,请问SQL的语句怎么写?
不要简写,我新手看不懂,要能直接查询的,谢了 展开
4个回答
展开全部
经过测试:我的方法可行。不行再找我。
select Time as 日期 ,sum(Num) as 月份总和
from Warning
group by Time
order by Time asc
/*---- 不写asc结果是一样的,因为默认是asc 升序,从1,2,3号这样开始升序排序。如果倒序则 desc
特别说明:依据楼主的提问:Time里面的日期不一定是连贯的,
1: 利用 group by Time 分组----解释:我把日期列Time 进行分组 如,1月, 2月, 3月, 4月, 5月
也就是说不管1月份的数据出现几次都归为一组,所有2月的都归为一组。到这里聪明点的人就知道了,把归为一组的 Num列 相加就可以实现要求了。
2:利用求和函数 sum (Num)把分组好的列求出他们的和就行了,这里就是所有1月为一组的会自动相加 (其他组的不相加),所有2月归为一组的会自动相加。。。。。。
3:利用 order by Time asc 升序产生连贯1月,2月,3月,这样升序排序。
4:特别说明:这里如果Time 列 数据类型是 datatime 的值是精确到时分秒的话,必须截取字符串,得到年月日或者只得到月份,因为时分秒分组的话就非常多了,1月份的时分秒都参与分组会有很多的,到时候得到1月份的和就变成1月份1号8点8分06秒 这个时间的都分组再求和。
5:楼主的要求:对应日期没有数据则显示0,isnull(你的列,0) 这个函数来转换成为0 在求和。0的总和还是0。
所以最终写成
select Time as 月份 ,sum(isnull(Num,0)) as 月份总和
from Warning
group by Time
order by Time asc
6:这个要求——因为第一列是表里面原本没有的,现在必须强行列出来,说得不太明确啊。
alter table 表名 add 列名 类型和属性等 这语句是创建一个新的列。
----*/
select Time as 日期 ,sum(Num) as 月份总和
from Warning
group by Time
order by Time asc
/*---- 不写asc结果是一样的,因为默认是asc 升序,从1,2,3号这样开始升序排序。如果倒序则 desc
特别说明:依据楼主的提问:Time里面的日期不一定是连贯的,
1: 利用 group by Time 分组----解释:我把日期列Time 进行分组 如,1月, 2月, 3月, 4月, 5月
也就是说不管1月份的数据出现几次都归为一组,所有2月的都归为一组。到这里聪明点的人就知道了,把归为一组的 Num列 相加就可以实现要求了。
2:利用求和函数 sum (Num)把分组好的列求出他们的和就行了,这里就是所有1月为一组的会自动相加 (其他组的不相加),所有2月归为一组的会自动相加。。。。。。
3:利用 order by Time asc 升序产生连贯1月,2月,3月,这样升序排序。
4:特别说明:这里如果Time 列 数据类型是 datatime 的值是精确到时分秒的话,必须截取字符串,得到年月日或者只得到月份,因为时分秒分组的话就非常多了,1月份的时分秒都参与分组会有很多的,到时候得到1月份的和就变成1月份1号8点8分06秒 这个时间的都分组再求和。
5:楼主的要求:对应日期没有数据则显示0,isnull(你的列,0) 这个函数来转换成为0 在求和。0的总和还是0。
所以最终写成
select Time as 月份 ,sum(isnull(Num,0)) as 月份总和
from Warning
group by Time
order by Time asc
6:这个要求——因为第一列是表里面原本没有的,现在必须强行列出来,说得不太明确啊。
alter table 表名 add 列名 类型和属性等 这语句是创建一个新的列。
----*/
展开全部
不要跟我说你连接的数据库还是以前的Access的
而不是你千辛万苦导好的sql server
而不是你千辛万苦导好的sql server
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select a.TheDate,isnull(count(b.time),0) as times
(select 1 as TheDate
union
select 2 as TheDate
union
select 3 as TheDate
union
select 4 as TheDate
union
select 5 as TheDate
union
select 6 as TheDate
union
.
.
.
.
select 30 as TheDate
union
select 31 as TheDate) a left join tbl b on a.TheDate=day(b.time)
group by a.TheDate
(select 1 as TheDate
union
select 2 as TheDate
union
select 3 as TheDate
union
select 4 as TheDate
union
select 5 as TheDate
union
select 6 as TheDate
union
.
.
.
.
select 30 as TheDate
union
select 31 as TheDate) a left join tbl b on a.TheDate=day(b.time)
group by a.TheDate
追问
看不大懂。。。为什么感觉连warning表都没用到。。。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个只能写存储过程 一两条sql是弄不出来的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询