求一简单的SQL统计语句

wangxiaofeiwuqiao 2009-04-06 11:15:31
本人有一订单表tb_OrderInfo,表中有一个下单时间字段OrderDate,类型为datetime,字段GoodsFee为销售额。我想统计当年,当月,当日的订单销售。
当年,当月,当日均用DateTime.Now来获得。比如年:string year = DateTime.Now.Year.ToString();问题是我怎么关联到
SQL语句中,是不是这样:select SUM(GoodsFee) from tb_OrderInfo where OrderDate Like '%" + year + "%';
当月,当日又怎么关联?请指教?
...全文
151 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyz9977 2009-04-06
  • 打赏
  • 举报
回复
判斷null值~~
sy_binbin 2009-04-06
  • 打赏
  • 举报
回复
如果当日没订单的时候,查询出来的数据是NULL

wangxiaofeiwuqiao 2009-04-06
  • 打赏
  • 举报
回复
我用的是1楼的方法,当当月没有订单时,或者当日没有订单时,运行出错:未将对象引用设置到对象的实例,如果数据库里面存在至少1条订单的时候就没有问题。
zzxap 2009-04-06
  • 打赏
  • 举报
回复
为了防止万一,所以还是转换一下
wangxiaofeiwuqiao 2009-04-06
  • 打赏
  • 举报
回复
你们的可以,特别1楼的不错,简单。不过我遇到一个小问题,就是当日的订单没有的时候,运行出错:未将对象引用设置到对象的实例:
那位可以解释一下呢?
sy_binbin 2009-04-06
  • 打赏
  • 举报
回复
晕了!!LZ都已经说明OrderDate字段是datetime类型了,你们还给他转换干什么呢??

当年:select sum(GoodsFee) from tb_OrderInfo where datediff(y,OrderDate,getdate())=0 
当月:select sum(GoodsFee) from tb_OrderInfo where datediff(m,OrderDate,getdate())=0
当日:select sum(GoodsFee) from tb_OrderInfo where datediff(d,OrderDate,getdate())=0


上面的就完全可以了!

如果是ACCESS的话就把datediff的第一个参数加上单引号,getdate()改成now()就可以了
qq2013 2009-04-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zzxap 的回复:]
SQL code

select * from table where datediff(year,convert(varchar(10),OrderDate,23),convert(varchar(10),getdate(),23))=0

select * from table where datediff(month,convert(varchar(10),OrderDate,23),convert(varchar(10),getdate(),23))=0

select * from table where datediff(day,convert(varchar(10),OrderDate,23),convert(varchar(10),getdate(),23))=0
[/Quote]
ding
zzxap 2009-04-06
  • 打赏
  • 举报
回复
[code=SQL]

select * from table where datediff(year,convert(varchar(10),OrderDate,23),convert(varchar(10),getdate(),23))=0

select * from table where datediff(month,convert(varchar(10),OrderDate,23),convert(varchar(10),getdate(),23))=0

select * from table where datediff(day,convert(varchar(10),OrderDate,23),convert(varchar(10),getdate(),23))=0

[/CODE]
zzxap 2009-04-06
  • 打赏
  • 举报
回复
[code=SQL]

select * from table where datediff(year,convert(varchar(10),OrderDate,23),convert(varchar(10),getdate(),23))=0

select * from table where datediff(month,convert(varchar(10),OrderDate,23),convert(varchar(10),getdate(),23))=0

select * from table where datediff(day,convert(varchar(10),OrderDate,23),convert(varchar(10),getdate(),23))=0

[/CODE]
zzxap 2009-04-06
  • 打赏
  • 举报
回复
[code=SQL]

select * from table where datediff(year,convert(varchar(10),OrderDate,23),convert(varchar(10),getdate(),23))=0

select * from table where datediff(mm,convert(varchar(10),OrderDate,23),convert(varchar(10),getdate(),23))=0

select * from table where datediff(day,convert(varchar(10),OrderDate,23),convert(varchar(10),getdate(),23))=0

[/CODE]
hxa165 2009-04-06
  • 打赏
  • 举报
回复
这个还是 datediff() 好点
yygyogfny 2009-04-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 greymouseyu 的回复:]
引用 2 楼 cyz9977 的回复:
SQL code
--當年
select SUM(GoodsFee) from tb_OrderInfo where datepart(yy, OrderDate )=datepart(yy,getdate())


--當月
select SUM(GoodsFee) from tb_OrderInfo where datepart(mm, OrderDate )=datepart(mm,getdate())

--當天
select SUM(GoodsFee) from tb_OrderInfo where datepart(dd, OrderDate )=datepart(dd,getdate())


DING
[/Quote]

哈哈,这个SQL肯定是有问题的,

当月:是指年份相同,月份也相同.
当日:是指年份相同,月份也相同!!!
greymouseyu 2009-04-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cyz9977 的回复:]
SQL code
--當年
select SUM(GoodsFee) from tb_OrderInfo where datepart(yy, OrderDate )=datepart(yy,getdate())


--當月
select SUM(GoodsFee) from tb_OrderInfo where datepart(mm, OrderDate )=datepart(mm,getdate())

--當天
select SUM(GoodsFee) from tb_OrderInfo where datepart(dd, OrderDate )=datepart(dd,getdate())
[/Quote]

DING
yygyogfny 2009-04-06
  • 打赏
  • 举报
回复

create table tb_OrderInfo
(
ids int identity(1,1),
OrderDate datetime,
GoodsFee decimal(18,2)
)

insert into tb_OrderInfo
select '2009-4-5',32.00
union all
select '2009-4-6',39.00
union all
select '2009-2-6',31.00
union all
select '2009-2-6',32.00
union all
select '2009-2-6',33.00
union all
select '2008-2-6',34.00
union all
select '2008-3-6',35.00

select * from tb_OrderInfo

select distinct
[当年] = (select sum(goodsfee) from tb_OrderInfo where year(orderdate) = year(getdate())),
[当月] = (select sum(goodsfee) from tb_OrderInfo where convert(varchar(7),orderdate,120) =convert(varchar(7),getdate(),120) ),
[当日] = (select sum(goodsfee) from tb_OrderInfo where convert(varchar(10),orderdate,120) = convert(varchar(10),getdate(),120))

from tb_OrderInfo

当年 当月 当日
--------------------------------------- --------------------------------------- ---------------------------------------
167.00 71.00 39.00

(1 row(s) affected)

cyz9977 2009-04-06
  • 打赏
  • 举报
回复

--當年
select SUM(GoodsFee) from tb_OrderInfo where datepart(yy, OrderDate )=datepart(yy,getdate())


--當月
select SUM(GoodsFee) from tb_OrderInfo where datepart(mm, OrderDate )=datepart(mm,getdate())

--當天
select SUM(GoodsFee) from tb_OrderInfo where datepart(dd, OrderDate )=datepart(dd,getdate())

sy_binbin 2009-04-06
  • 打赏
  • 举报
回复
当年:select sum(GoodsFee) from tb_OrderInfo where datediff(y,OrderDate,getdate())=0
当月:select sum(GoodsFee) from tb_OrderInfo where datediff(m,OrderDate,getdate())=0
当日:select sum(GoodsFee) from tb_OrderInfo where datediff(d,OrderDate,getdate())=0
wangxiaofeiwuqiao 2009-04-06
  • 打赏
  • 举报
回复
我知道了,谢谢各位!
wangxiaofeiwuqiao 2009-04-06
  • 打赏
  • 举报
回复
弄了半天不知道怎么判断,请指教。还有我的数据库里面明明有2009年的订单,为什么用这个select sum(GoodsFee) from tb_OrderInfo where datediff(y,OrderDate,getdate())=0 这个用SQL查询出来是空的。
还有运行的时候出错,还是运行出错:未将对象引用设置到对象的实例。
hui_1019 2009-04-06
  • 打赏
  • 举报
回复
用个返回值来接收是否有数据,如果没有则返回0,否则返回1
那么就在调用存储过程的时候判断一下返回值就再进行读取就可以了

62,268

社区成员

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

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

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

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