sql语句 group 分组求和求数量

chuachua 2008-09-19 01:20:06
我有两表结构如下:
t_order(id,orderid,orderdate,status)
t_psger(id,orderid,acny)
两表orderid列相关联,现在我想按orderdate分组列出不同status的t_psger表中的数量及acny求和
我有一语句已经能达到该效果,但是好象太不简明了点,希望大家能帮我简化一下:
select unsell,saled,cnt,ba.orderdate from(select unsell,cnt,aa.orderdate from (select sum(acny) unsell,orderdate from (select acny,convert(nvarchar(10),orderdate,121) orderdate
from t_order a,t_psger b where b.orderid=a.orderid and a.status='未收银') c group by c.orderdate) aa left join
(select count(id) cnt,convert(nvarchar(10),orderdate,121) orderdate from t_order
group by convert(nvarchar(10),orderdate,121)) ab on aa.orderdate=ab.orderdate) ba left join
(select sum(acny) saled,orderdate from (select acny,convert(nvarchar(10),orderdate,121) orderdate
from t_order a,t_psger b where b.orderid=a.orderid and a.status='已收银') c group by c.orderdate) bb
on ba.orderdate=bb.orderdate
语句很结构化,相信看了不会头晕!
...全文
503 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuachua 2008-10-18
  • 打赏
  • 举报
回复
晕死,发了贴给忙忘了,感谢各位的回答,但我实际需要的结果却是
select unsell,saled,cnt,ba.orderdate,有点不符
hyde100 2008-09-19
  • 打赏
  • 举报
回复
楼主是想知道每一天的未未收银和已收银的条数以及它们对应的总钱数对吧?如是,请参考下面:

create table #t_order(id int identity(1,1),orderid int ,orderdate nchar(8),status nvarchar(50))
create table #t_psger(id int identity(1,1),orderid int ,acny decimal(10,2))

insert into #t_order(orderid,orderdate,status)
select 1,'20080918','未收银' union all
select 2,'20080919','未收银' union all
select 3,'20080920','未收银' union all
select 4,'20080920','已收银'

insert into #t_psger(orderid,acny)
select 1,10 union all
select 2,20 union all
select 3,30 union all
select 3,40 union all
select 4,40

select
a.orderdate,
a.status,
count(a.status) r_count,
sum(b.acny) sum_money
from #t_order a
left outer join #t_psger b on a.orderid = b.orderid
group by a.orderdate,
a.status

drop table #t_order
drop table #t_psger

结果:
20080918 未收银 1 10.00
20080919 未收银 1 20.00
20080920 未收银 2 70.00
20080920 已收银 1 40.00
lxuan_025 2008-09-19
  • 打赏
  • 举报
回复


dig
tim_spac 2008-09-19
  • 打赏
  • 举报
回复
/*t_order(id,orderid,orderdate,status) 
t_psger(id,orderid,acny)
两表orderid列相关联,现在我想按orderdate分组列出不同status的t_psger表中的数量及acny求和
*/
select orderdate, status, cnt=sum(cnt), ancy=sum(ancy)
from t_order a
left join (
select orderid,cnt=count(1),ancy=sum(acny)
from t_psger
group by orderid
) as b on a.order_id=b.order_id
group by orderdate, status
这回假设在t_psger中每个orderid可能存在多行
tim_spac 2008-09-19
  • 打赏
  • 举报
回复
/*t_order(id,orderid,orderdate,status) 
t_psger(id,orderid,acny)
两表orderid列相关联,现在我想按orderdate分组列出不同status的t_psger表中的数量及acny求和
*/
select orderdate, status, count(b.orderid), sum(ancy)
from t_order a
left join (
select orderid,ancy=sum(acny)
from t_pager
group by orderid
) as b on a.order_id=b.order_id
group by orderdate, status
Garnett_KG 2008-09-19
  • 打赏
  • 举报
回复
语句很结构化,相信看了不会头晕!
>>

看到这句我就晕了!

34,590

社区成员

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

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