请教一个SQL 查询优化问题

honey888 2005-06-24 09:16:41

我有三个表: A 与B 结构一样是销售信息,只是放的不同地区的数据 .还有C是客户名称表
A 表如下 C 表
no type invno score No invno Cus_no Cus_name
A 1 1 10 A 1 001 AAAA
A 2 1 30 B 2 003 CCC
B 1 2 40 C 3 002 BB
B 2 2 20 D 4 004 EEEEE
C 1 3 60
C 2 3 30
D 1 4 40
D 2 4 8

现在想得到下面的结果:

no invno type_1 type_2 invno Cus_no Cus_name where_from
A 1 10 30 1 001 AAAA 表A
A小计 10 30
B 2 40 20 2 003 CCC 表A
B小计 40 20
C 2 60 30 3 002 BB 表A
C小计 60 30
D 2 40 8 4 004 EEEEE
D小计 40 8

其实有三个目的,第一要按 TYPE 类型横过来,第二: 要与C表建立关联并取出cus_no,Cus_name,第三要小计,小计的目的与表B合并后,能分别看到同样的NO为A的,在A表与B表合并后分别是多少.
我用了三句分开的SQL做,还不很好.

select no,type_1=sum(case type when 1 then AMOUNT end),type_2=sum(case type when 2 then
AMOUNT end) from A group by no
然后再取出第二个表的结果,
然后再与 join in C
然后再分组求小计,小计如何也能成为其中生成的新表的一条记录,我就不会了.

  请各位大哥,帮忙,看一下,如何写.感谢.周5还在加班呀.累呀
辛苦各位了,周末愉快.
...全文
176 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ReportingServices 2005-07-07
  • 打赏
  • 举报
回复
用pb做好了,别把sql 搞那么复杂了
honey888 2005-07-07
  • 打赏
  • 举报
回复
88 多么吉祥的分数也没有人理我
wwwwb 2005-07-05
  • 打赏
  • 举报
回复
精简一些:
select case when substring(ida,2,2)='合计' then ' ' else where_from end as where_from,
* from
(select isnull(id,'总计') as ida,* from
(select a.*,b.* from
(select case when grouping(invno)='1' then rtrim(no)+'合计'
else no end as id,
min(invno) as ino,typ1=sum(case when type='1' then score else 0 end),
typ2=sum(case when type='2' then score else 0 end),'表A' as where_from
from qqa1 group by no,invno with rollup) a left join qqc1 b on b.no=a.id
)c)d
wwwwb 2005-07-04
  • 打赏
  • 举报
回复
试试:
select a.*,b.* from
(select no,min(invno) as ino,typ1=sum(case when type='1' then score else 0 end),
typ2=sum(case when type='2' then score else 0 end),'表A' as where_from
from qqa1 group by no union
select case when grouping(no)=1 then 'hj' else no end ,rtrim(no)+'小计' as ino,sum(typ1) as typ1 ,sum(typ2) as typ2,' ' as where_from
from (select no,min(invno) as ino,typ1=sum(case when type='1' then score else 0 end),typ2=sum(case when type='2' then score else 0 end)
from qqa1 group by no) dd group by no with rollup ) a left join qqc1 b on b.no=a.no and a.where_from<>' ' order by a.no,a.ino
honey888 2005-07-04
  • 打赏
  • 举报
回复
UP
honey888 2005-06-27
  • 打赏
  • 举报
回复
up
Well 2005-06-25
  • 打赏
  • 举报
回复
可以用case when
group by
with cube
之類的來實現
honey888 2005-06-25
  • 打赏
  • 举报
回复
UP

是网络上午不通的原因,还是我没有表达清楚?

34,571

社区成员

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

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