求一报表查询sql语句的写法.急呀.

Juchiyufei 2006-11-27 02:51:35

有三个表如下所示:

Table: A

ProudctNO StockPrice
-------------------- ---------------
MIAA0000002 9.5555
MIAA0000001 8.1234
MIAA0000001 9.5555
MIAA0000003 8.1234
MIAA0000002 1.4133
MIAA0000001 9.5555
MIAA0000001 1.2000
MIAA0000001 1.1000
MIAA0000002 2.0000
MIAA0000002 2.0000
MIAA0000001 9.6563
MIAA0000001 968.6530

table B:

ProudctNO SalePrice
-------------------- ---------------
MIAA0000002 8.1234
MIAA0000001 9.5555
MIAA0000002 8.1234
MIAA0000001 9.5555
MIAA0000002 8.1234
MIAA0000001 1.1000
MIAA0000001 1.2000
MIAA0000003 .0000
MIAA0000002 .0000
MIAA0000001 .0000
MIAA0000008 2.0000
MIAA0000007 1.0000

table C:

ProudctNO Name
-------------------- ------------------------
MIAA0000001 a
MIAA0000002 a
MIAA0000003 a
MIAA0000004 x24c45
MIAA0000005 x24c45
MIAA0000006 22222222243
MIAA0000007 22222
MIAA0000008 23434
MIAA0000009 dd
MIAA0000010 UC3842BN

报表需要显示以下四个字段:
ProudctNO ProudctName, sum_StockPrice, sum(SalePrice)

好像有点简单,我是用两个查询语句来实现的,但总觉得效率方面不高,有没有什么方法用一个查询实现(视图,存储过程,sql语句)之类的,并且又能查到所有的数据.


谢谢.
...全文
661 49 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
Juchiyufei 2006-11-29
  • 打赏
  • 举报
回复
高手就是高手呀.
tcsc1981 2006-11-28
  • 打赏
  • 举报
回复
up
tangqijun199 2006-11-28
  • 打赏
  • 举报
回复
select A.ProudctNO,Max(Name) as Name,Sum(Isnull(StockPrice,0)) as sum_StockPrice,
...

你这里用到Max(Name)是什么意思? 笔误?
=====================================
没有group by的列都要聚合的。这个地方不管用max,还是min结果都是一样了。没有错列,呵呵。
Radar2006 2006-11-28
  • 打赏
  • 举报
回复
up,这个版不错
hansyswin 2006-11-27
  • 打赏
  • 举报
回复
mark
linnansong 2006-11-27
  • 打赏
  • 举报
回复
学习了……
qinhl99 2006-11-27
  • 打赏
  • 举报
回复
select a.proudctNo,a.Name,sst, ssa from tc a
left join
(select proudctNo,sum(stockprice) ssp from ta group by proudctNo) b
on a.proudctNO=b.proudctNo
left join
(select proudctNo,sum(saleprice) ssa from tb group by proudctNo) c
on a.proudctNo=c.proudctNo

是正确的!
Juchiyufei 2006-11-27
  • 打赏
  • 举报
回复
哪里有资料讲select语句的,很全,很深,很细的那种?
allright_flash 2006-11-27
  • 打赏
  • 举报
回复
marco08(天道酬勤)
是不是刘兵?
Juchiyufei 2006-11-27
  • 打赏
  • 举报
回复
ModelInfoNO StockPrice table A
-------------------- ---------------
MIAA0000001 5.0000
MIAA0000001 5.0000
MIAA0000002 4.0000
MIAA0000002 4.0000
MIAA0000003 3.0000
MIAA0000003 3.0000
MIAA0000004 2.0000
MIAA0000004 2.0000
MIAA0000005 1.0000
MIAA0000005 1.0000

(10 row(s) affected)

ModelInfoNO SalePrice table B
-------------------- ---------------
MIAA0000001 15.0000
MIAA0000001 15.0000
MIAA0000002 14.0000
MIAA0000002 14.0000
MIAA0000003 13.0000
MIAA0000003 13.0000
MIAA0000004 12.0000
MIAA0000004 12.0000
MIAA0000005 11.0000
MIAA0000005 11.0000

(10 row(s) affected)

ModelInfoNO ModelNO Sum_StockPrice Sum_SalePrice
-------------------- -------------------------------------------------- ---------------------------------------- ----------------------------------------
MIAA0000001 a 10.0000 30.0000
MIAA0000002 a 8.0000 28.0000
MIAA0000003 a 6.0000 26.0000
MIAA0000004 x24c45 4.0000 24.0000
MIAA0000005 x24c45 2.0000 22.0000

(5 row(s) affected)
fcuandy 2006-11-27
  • 打赏
  • 举报
回复
那个语句是有bug的,只会取a,b表的交集. 而你表中的数据恰好a,b中都是一样存在的productno,所以看不出来问题.

要用我第二次写的那样,才会取并集.
Juchiyufei 2006-11-27
  • 打赏
  • 举报
回复
select a.proudctNo,a.Name,sst, ssa from tc a
inner join
(select proudctNo,sum(stockprice) ssp from ta group by proudctNo) b
on a.proudctNO=b.proudctNo
inner join
(select proudctNo,sum(saleprice) ssa from tb group by proudctNo) c
on a.proudctNo=c.proudctNo

楼上的,你好强呀。

另外,楼主把product拼错了,害我改了好多次语句.
========
不好意思呀。
fcuandy 2006-11-27
  • 打赏
  • 举报
回复
看错了.

select x.productno,y.name,sst,ssa
from
(
select distinct productno from ta
union
select distinct productno from tb
) x
left join
(select proudctNo,sum(stockprice) ssp from ta group by proudctNo) b
on x.proudctNO=b.proudctNo
left join
(select proudctNo,sum(saleprice) ssa from tb group by proudctNo) c
on x.proudctNo=c.proudctNo
left join tc y
on x.productno=y.productno
fcuandy 2006-11-27
  • 打赏
  • 举报
回复
那么直接将我写在3楼的语句用inner join即可.
Juchiyufei 2006-11-27
  • 打赏
  • 举报
回复

select isnull(t1.ProductNO,t2.ProductNO) as ProductNO , isnull(t1.name,t2.name) as name,t1.sum_StockPrice,t2.sum_SalePrice from
(
select c.ProductNO,c.Name,m.sum_StockPrice from c,
(select ProductNO,sum(StockPrice) as sum_StockPrice from A group by ProductNO) m
where c.ProductNO=m.ProductNO
) t1 full join
(
select c.ProductNO,c.Name,n.sum_SalePrice from c,
(select productno,sum(SalePrice) as sum_SalePrice from B group by ProductNO) n
where c.ProductNO=n.ProductNO
) t2
on t1.ProductNO = t2.ProductNO

我会把里面的name去掉,只保留NO,两个price,写成视图。因为显示的时候还需要显示其它的产品信息的,如果放在里去做连接分组求和的话,代价有点大,最后再用这个视图去和产品表做NO等值连接.

你挺厉害的。:)
dawugui 2006-11-27
  • 打赏
  • 举报
回复
那你找找access是否有对应的语句?
Juchiyufei 2006-11-27
  • 打赏
  • 举报
回复
你用了isnull关键字,肯定不能在access里用了。

因为我这个系统要分版本,就只有试用版本的才会用access的.
dawugui 2006-11-27
  • 打赏
  • 举报
回复
access?
不知道行不行.我基本不用OFFICE这个数据库.
Juchiyufei 2006-11-27
  • 打赏
  • 举报
回复
现在又有问题了,要同时能支持两种数据库,MSSQL与ACCESS,如果不行的话,就只有分开写了。
Juchiyufei 2006-11-27
  • 打赏
  • 举报
回复
dawugui(潇洒老乌龟)
===========
恭喜你,老乌龟,回答完全正确,现在正在测效率.
加载更多回复(29)

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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