求一SQL查询语言(可能不是很难,还请指教)(200分)

B

B.B

Unregistered / Unconfirmed
GUEST, unregistred user!
求一SQL查询语言(可能不是很难):
数据库:Interbase6
有两张表: Goods(货品表)、OutputDB(出库表)
Goods
GName(货品名称) GGroup(货品分类)
货品1 Group1
货品2 Group1
货品3 Group2
货品4 Group2
OutputDB
OID(领货单号) GName(货品名称) OSum(出库数量) Dept(领货部门)
001 货品1 2 部门1
002 货品1 3 部门2
003 货品2 4 部门3
004 货品3 2 部门3
005 货品3 1 部门1
006 货品4 5 部门2
007 货品3 7 部门1
现在想查询得到如下的结果
Dept Group1 Group2
部门1 2 8
部门2 3 5
部门3 4 2
简单地说就是货品有分类,统计的时候要对每个部门领取的每一类货品
的总数进行统计,而不在乎具体领取的是什么货品。
请给出SQL语言,谢谢
 
select dept,count(gname) from outputdb where gname in (select gname from goods
where ggroup =group1) group by dept
这样得到一个,同样得到另一个.两表合并
 
TO:zhouaiping
我没有具体试,不知道行不行,你指的是得到一列吗?怎么用SQL把多列合并?
希望高手来一次解决行吗?用临时表的话我也能够办到,只是感觉这种问题,用
SQL应该可以一次得到结果!
 
我查过过去的贴子,好像最后都是通过循环写入StringGrid来解决的
关注同样问题的朋友帮我提前一下吧,我该上班了,谢谢
 
如果分类是不确定的,只能这样
 
这是一个讨论过很久的问题,
如果你的group是固定的话,可以用多个select再union的方式,
或多表内联的方式解决,
如果你的group是不定的,数量可变的,那么只能用存储过程解决,
不是简单不简单的问题,是这类问题的共性。简单sql只能实现以下效果
dept GGroup OSum
部门1 group1 2
部门1 group2 8
部门2 group1 3
部门2 group2 5
.......
 
gophie兄讲得不错,假如你的Group是固定的,可以这样写:
    (以下Sql代码在SQL Server 2K下调试通过)
Select A.Dept,Group1,Group2
From (Select Dept,Sum(OSum) Group1
From OutputDB
Where GName In (Select GName
From Goods
Where GGroup = 'Group1')
Group By Dept) A Join
(Select Dept,Sum(OSum) Group2
From OutputDB
Where GName In (Select GName
From Goods
Where GGroup = 'Group2')
Group By Dept) B
On (A.Dept = B.Dept)
    但是,如果你的Group是不固定的,我也不知道怎么写,据gophie兄讲用存储过程可以做到
,还请您给出具体存储过程代码,谢!
 
原理就是一个sql查出所有的group1
然后做个循环,将每一个group1的select给union起来,
就可以啦!其实最简单的做法就是像我上面写的那样用简单sql查询,
然后在写表的时候用程序控制
 
to gophie:
抱歉,我没有明白你的意思!你能否抽空调试一下,具体写出解决问题的存储过程原代码
 ,也好让大家学习一下对此类问题的解决方法,谢!
 
gophie哭着说,说实话,我不会写存储过程,

一贯的认为需要程序解决的问题都可以用存贮过程解决
因为存储过程不被ANSI SQL定为标准,不同数据库之间差异太大。
而且你既然愿意写一个存储过程为什么不能写一个函数用用呢?

个人如是认为,希望高手给与指正!
存储过程有什么优点?希望大虾们给个说法,送上200分。
结束后会挂一个新贴连接的!
 
to:gophie
你说的:
简单sql只能实现以下效果
dept GGroup OSum
部门1 group1 2
部门1 group2 8
部门2 group1 3
部门2 group2 5
我同意,我也就只做到这一步了,今天我已经通过别的方法达到了目的。
如果有空能给我讲讲union怎么用吗?就以这个问题为例吧。
贴子还留一段时间,过几天散分!
 
to:Archerfl
感谢你sql 2000下的语句,但是好像InterBase不支持
select XXX from (select XXX...
这样的语句。也可能是我写的语句有问题,还是非常感谢你。
过几天再散分,还想看看有没有其他解决办法。
 
select dept,sum(group1) group1,sum(group2) group2 from
(select b.dept,b.osum group1,0 group2 from goods a,outputdb b
where a.gname=b.gname and a.ggroup='group1'
union all
select b.dept,0 group1,b.osum group2 from goods a,outputdb b
where a.gname=b.gname and a.ggroup='group2')
sql嵌套属于标准sql,绝对没有数据库会不支持,
问题可能出在不同数据库的sql语法有微小差别上面。
 
多人接受答案了。
 
顶部