sql怎么添加自定义列并且将此列的数据作为条件查询
发布网友
发布时间:2022-04-09 10:59
我来回答
共4个回答
热心网友
时间:2022-04-09 12:28
经过测试:我的方法可行。不行再找我。
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 列名 类型和属性等 这语句是创建一个新的列。
----*/
热心网友
时间:2022-04-09 13:46
不要跟我说你连接的数据库还是以前的Access的
而不是你千辛万苦导好的sql server
热心网友
时间:2022-04-09 15:21
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追问看不大懂。。。为什么感觉连warning表都没用到。。。
热心网友
时间:2022-04-09 17:12
你这个只能写存储过程 一两条sql是弄不出来的