请关注。在线等待,关于SQL语句,50分,急 (50分)

  • 主题发起人 主题发起人 blave
  • 开始时间 开始时间
B

blave

Unregistered / Unconfirmed
GUEST, unregistred user!
paradox表,tyqkb.db ,结构如下
name sex birthyear zhibu
-----------------------------
姓名 性别 出生年 部门 (说明)
---------------------------------------(下面是记录)
张三 男 1964 销售
李四 女 1971 公关
王二 男 1980 销售
刘五 男 1957 公关
......
需要用一个SQL语句得出下列结果
部门 职员数 男职员数 女职员数 30岁以上职员数 30岁以下职员数
--------------------------------------------------------------------
销售 2 2 0 1 1
公关 2 1 1 2 0
--------------------------------------------------------------------
我是这么写的:
select a.zhibu AS 部门,count(a.name) AS 职员数,
(select count(b.sex) from tyqkb.db as b where a.sex=b.sex and b.sex="男') AS 男职员数,
(select count(b.sex) from tyqkb.db as b where a.sex=b.sex and b.sex="女') AS 女职员数,
.
....(忽略年龄的计算....)
from tyqkb.db as a group by a.zhibu;
得到的结果男女职员数的统计不正确等于0,可在ACCESS中的类似语句已经通过,求正确语句
还有我真的不太明白在SQL Builder里面处理b.sex="男"的时候便成了b.sex='男',而在程序里却不能运行
必须要双引号
 
具体SQL语句我还没试,有一点 paradox表的SQL语句在程序里单引号“'”是可以用的,
但在引用前要多加一个“'”,如:
sql.text:='select * from TEMP where ID='''+S_temp+'''';
|
前两个“'”产生一个“'”
 
你的东西好像不行。
a.???
b.???

 
老兄,这条语句应该没问题,但是在paradox不一定好用,
要是在Sybase 或MySql可以。
 
to bigroute:
你说的对,我在ACCESS中调试可以通过,可是我必须用paradox,因为程序就只剩下查询要做了
哪位仁兄能提供个解决方案
 
select count(b.sex) from tyqkb.db as b where a.sex=b.sex and b.sex="男'
------------------------------------
那个 as b 是干什么用的?可能这个地方有问题。
 
一边顶一边想想。。。呵呵。
 
如果你只是用来查询的话可以这么做
ADOCONNECTION连接PARADOX
///
Provider=Microsoft.Jet.OLEDB.4.0;
User ID=Admin;
Data Source=c:/temp; //PARADOX表所在位置
Mode=Share Deny None;
Extended Properties=Paradox 7.x; //加上这个属性
///
在ADOQUERY中执行SQL
select zhibu as 部门,count(zhibu) as 职员数,
(select count(zhibu) from tyqkb b where b.zhibu=a.zhibu and b.sex='男') as 男职员数,
(select count(zhibu) from tyqkb b where b.zhibu=a.zhibu and b.sex='女') as 女职员数
from tyqkb a
group by zhibu

//缺点是这个Paradox表必须有定义主关键字
 
加ADO连接又需要解决路径问题。真没有语句可以解释我的问题吗
是不是因为parabox对SQL语言支持的问题
我苦恼
 
如果paradox与执行文件在同一路径下
Data Source=.;
如在执行文件所在目录下的子目录temp中
Data Source=temp;
用相对路径就可以了
 
to quicksilver:
如何设置用ADO连接BDE,你说的几个属性在哪儿设置,我没找到

PS:
找到了,谢谢你,ADO我不是很熟悉
 
》select a.zhibu AS 部门,count(a.name) AS 职员数,
》(select count(b.sex) from tyqkb.db as b where a.sex=b.sex and b.sex="男') AS 男职员数,
(select count(b.sex) from tyqkb.db as b where a.sex=b.sex and b.sex="女') AS 女职员数,
》.
》....(忽略年龄的计算....)
》from tyqkb.db as a group by a.zhibu;

是这样的: 这是自联接查询。但好像paradox桌面DB不支持自链接的。
要么更改数据库为其他DB,要么修改SQL语句。
 
ADO连接PARADOX表

在ADO的ADOCONNECTION设置数据库连接属性
在提供者页选Microsoft.Jet.OLEDB.4.0 Provider
然后在所有页里设置Data Source 设为paradox表绝对路径或可执行程序所在的相对路径
设置扩展属性(Extended Properties)为Paradox 7.x

最后在连接页面里按测试连接,判断连接是否成功

 
to quicksiler
你说的没错,用ADO需要加主键,而且设计期不能查询,呵呵,总是报表已经打开
运行期时还提示些错误,让我巫山云雨了一番,当然不是爽的感觉了,所以我放弃使用ADO了
不过您的提示在做ACCESS这样的桌面数据库的时候给了我很大的提示,谢谢
to jrq:
真的没有解决的办法了吗,我主观上认为你说的是对的!
看来,我只好用最土的办法了
------------------------------------------------谢谢大家的提示,由衷感谢
 
这里是不是可以不要a.sex=b.sex and b.sex="男'而只是a.sex="男'即可?
 
select 部门,sum(部门),sum(iif(性别=‘男’,1,0)),sum(iif(性别=‘女’,1,0))
from tablename
group by 部门
不知支持不支持 iif
 
不同数据库,都有各自的函数,所以方法很多。
只要不用到函数,和自关联就肯定可以移殖的,
象语句:
select a.column1,(select count(column1) from table1 b where b.column1=a.column1)
from table1 a
group by cloumn1

中从分析角度上,就行不通,不知以上作答的人有没有去试这语句。

下面的这个方法一定可行!

select a.部门 ,a.职员数,b.男职员数,c.女职员数,....
from
(select zhibu as 部门,count(name) AS 职员数 from tyqkb.db group by zhibu) a,
(select zhibu as 部门,count(sex) AS 男职员数 from tyqkb.db where sex="男' group by zhibu ) b,
(select zhibu as 部门,count(sex) AS 女职员数 from tyqkb.db where sex="女' group by zhibu ) c,
..........
where a.zhibu=b.zhibu and b.zhibu=c.zhibu and c.zhibu.....
and add mark to imking!
 
imking的思路不错,学习
不过当某个部门全是男的或全是女的时候,取出的数据就不正确了
 
我告诉过你,你的语句没问题,就是 paradox不支持,
赶快想别的办法吧。要不自己手动做,把数据库从头到尾遍历一下,自己汇总。
 
各位FW,,,我用的是ORACLE,对于这种问题,可以用GROUP BY 来实现,,PARADOX是否

支持GROUP BY 哦?

如果支持的话,用这个来,不就很简单了吗?
 
后退
顶部