佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1249|回复: 36

请帮帮我combine tis 2 query statement[已解决]

[复制链接]
发表于 4-8-2008 02:28 PM | 显示全部楼层 |阅读模式
据我没上贴时的搜索,网路上的都有自己的条件优先,所以不太适合大众用
这个贴很好用,尤其在处理hierarchical data, calling parent and children data
决解答案在#26,谢谢WilBugz的指导
------------------------------------------------------------------------------------------------------------------------------------------------------

我已没法度了。。。
请大大帮帮忙

1. select * from MyDataBase
2. select count(*)as total_child,direct_mngr_personnel_number as personnel_number from MyDataBase group by direct_mngr_personnel_number

他们都是来自同样的table
我不知道能如何能把他们放在一起
我要用dataset call 出来的
谢谢指教。。。

[ 本帖最后由 心的太平洋 于 5-8-2008 12:09 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 4-8-2008 02:45 PM | 显示全部楼层
给一点example关于你有什么data,要拿出怎样的data
回复

使用道具 举报

 楼主| 发表于 4-8-2008 02:53 PM | 显示全部楼层

回复 2# WildBugZ 的帖子

我是要拿全部data
ex:
personnel_number, firstnane, lastname ......
最后一格是direct_mngr_personnel_number
我想加多一格在datagrid 是total_child(这是从第二个sql statement 提出来的)
比较详细在以下网址:
http://bytes.com/forum/thread826914.html
回复

使用道具 举报

发表于 4-8-2008 03:44 PM | 显示全部楼层
还是有点不清楚
但我尽管试试
我首先assume你说的Direct_mngr_personnel_number 是当前这个人的upline的personnel_number,
那我会以以下query取得:

select self.personnel_number, min(self.firstname) as firstname, min(self.lastname)  as lastname, count(*)  as total_child
from MyDataBase self left outer join MyDataBase dl on self.personnel_number=dl.Direct_mngr_personnel_number
group by self.personnel_number
回复

使用道具 举报

 楼主| 发表于 4-8-2008 03:53 PM | 显示全部楼层

回复 4# WildBugZ 的帖子

GENG~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
做到了, 谢谢你, WildBugZ
回复

使用道具 举报

发表于 4-8-2008 03:56 PM | 显示全部楼层

不谢,我想我们应该在做着相关的东西。
因为我公司也有所谓upline,downline的算法,
这类的query做得太多了,晕 @@
回复

使用道具 举报

Follow Us
 楼主| 发表于 4-8-2008 04:05 PM | 显示全部楼层

回复 4# WildBugZ 的帖子

不好意思,刚才太兴奋了
我有些东西看不懂,请赐教。。
请问 self,dl & min 是什么function 的,几时需要叫出来
select self.personnel_number, min(self.firstname) as firstname, min(self.lastname)  as lastname, count(*)  as total_child
from MyDataBase self left outer join MyDataBase dl on self.personnel_number=dl.Direct_mngr_personnel_number
group by self.personnel_number

如果哪个人没有下属可不可以total_child= 0?
回复

使用道具 举报

 楼主| 发表于 5-8-2008 08:45 AM | 显示全部楼层
我还想请问WilBugz,
我写了一下的query, 为什么它只能出现前半部,后半部全都是null
select * from MyDAtaBase left join (select count(*)as total_child from MyDAtaBase group by direct_mngr_personnel_number) on MyDAtaBase.personnel_number = MyDAtaBase.direct_mngr_personnel_number order by personnel_number asc
谢谢。。

[ 本帖最后由 心的太平洋 于 5-8-2008 08:59 AM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 5-8-2008 09:17 AM | 显示全部楼层
原帖由 心的太平洋 于 4-8-2008 04:05 PM 发表
不好意思,刚才太兴奋了
我有些东西看不懂,请赐教。。
请问 self,dl & min 是什么function 的,几时需要叫出来
select self.personnel_number, min(self.firstname) as firstname, min(self.lastname)  as last ...


self, dl 是我为了方便辨认table,自己命名出来的,因为我是用两个 同样的table来 join,必须清楚列明 要用哪一个table的资料。min 是minumum,因为我用了group by,sql会不清楚group了之后,相同的field要display那一种资料。举个例子,当你的firstname field有TAN, LEE, LIM, personnel_number都是1234, 那group by personnel_number 时,sql会知道你需要display的是哪一个吗?因为group by 之后,相同的personnel_number只可以出现一个record. 所以可以用min(fieldname)取最小的,max(fieldname)取最大的,是sql的function来的。
回复

使用道具 举报

发表于 5-8-2008 09:19 AM | 显示全部楼层
基本上,如果哪个人没有downline,sql应该会显示NULL,
但应为你用的是count(*),就不会有NULL。
回复

使用道具 举报

发表于 5-8-2008 09:23 AM | 显示全部楼层
select * from MyDAtaBase left join (select count(*)as total_child from MyDAtaBase group by direct_mngr_personnel_number) on MyDAtaBase.personnel_number = MyDAtaBase.direct_mngr_personnel_number order by personnel_number asc

这个query就错了。
我之前用的是Table A join Table B on A.id=B.id
你用的是Table A join Table A on A.id=B.id,这样根本没有意义。
所以sql自动帮你把
select * from MyDAtaBase left join (select count(*)as total_child from MyDAtaBase group by direct_mngr_personnel_number)
两个table join 一起了,这会做出很多错误的资料。
因为没有注明两个table 的id是相通的。
回复

使用道具 举报

发表于 5-8-2008 09:26 AM | 显示全部楼层
我猜你要的应该是:

select * , (select count(*)as total_child
                     from MyDAtaBase
                     where personnel_number=a.personnel_number
                     group by direct_mngr_personnel_number)
from MyDAtaBase a
order by a.personnel_number asc

[ 本帖最后由 WildBugZ 于 5-8-2008 09:28 AM 编辑 ]
回复

使用道具 举报

发表于 5-8-2008 09:29 AM | 显示全部楼层
不过这个方法不好,
每个record都要重新select count(*)一次,会导致系统搜索的时间变长.
回复

使用道具 举报

 楼主| 发表于 5-8-2008 09:29 AM | 显示全部楼层

回复 9# WildBugZ 的帖子

早安。。
我还想问的是:
每个人的personnel number都不一样,只有direct_mngr_personnel_number 有些人一样的
是不是用同样的方式,把他们group by?
为什么我改了后全部都不一样人了,嘻嘻。。。
太笨,可能是我不会改
不好意思,打扰了。。
回复

使用道具 举报

发表于 5-8-2008 09:52 AM | 显示全部楼层
原帖由 心的太平洋 于 5-8-2008 09:29 AM 发表
早安。。
我还想问的是:
每个人的personnel number都不一样,只有direct_mngr_personnel_number 有些人一样的
是不是用同样的方式,把他们group by?
为什么我改了后全部都不一样人了,嘻嘻。。。
太笨,可能是 ...


按你的情形, 你应该只是需要显示每一个personnel number一次吧?
这时候你就需要group by personnel number,
这样可以确定它一定只出现一次.
回复

使用道具 举报

 楼主| 发表于 5-8-2008 09:53 AM | 显示全部楼层
原帖由 WildBugZ 于 5-8-2008 09:26 AM 发表
我猜你要的应该是:

select * , (select count(*)as total_child
                     from MyDAtaBase
                     where personnel_number=a.personnel_number
                     group by d ...






以上没有用join,他能join meh?
回复

使用道具 举报


ADVERTISEMENT

发表于 5-8-2008 10:01 AM | 显示全部楼层
原帖由 心的太平洋 于 5-8-2008 09:53 AM 发表
以上没有用join,他能join meh?

这一个我没有用到join
只是单纯的select

比方说,你有personnel_number :123, 456, 789
用这个query,sql会显示:
personnel_number
--------------------------
123
456
789
对吧?
这个query就是要sql在显示每一行时,另外去query另一个result出来:
personnel_number   count(*)
--------------------------  -----------
123                            select count(*) from MyDataBase  where personnel_number=123 => 拿到5
456                            select count(*) from MyDataBase  where personnel_number=456 => 拿到10
789                             select count(*) from MyDataBase  where personnel_number=789 => 拿到0
回复

使用道具 举报

发表于 5-8-2008 10:02 AM | 显示全部楼层
因为每个result都会query一次,所以说不好。
万一你有1000000个record,就可以等system hang了
回复

使用道具 举报

 楼主| 发表于 5-8-2008 10:22 AM | 显示全部楼层
我的方法的确不好用。。
我还是不大明白
WilBugz,我说我的情况让你懂,
其实我在准备我的论文课业
这是我的第一步,我从sql下手
每个employee 都有personnel_number(primary key) and direct_mngr_personnel_number
打个比方:IT worker have their own personnel number and person they direct to is it manager who has 11 as his personnel number.hence, a IT worker has a specific personnel number and has 11 as his direct_mngr_personnel_number
所以我想用一个query show 在datagrid 里
每个人如果他有孩子的话,datagrid 里就会出现"show" button in tat row of person
所以我要的是
personnel_number   total_child
-------------------            --------     -------------  
11                                 10               show           (有十个人under他)
1                                     0                                   (没有人)


不好意思,你打扰你工作吗?
如有的话,你得空才回复我吧。。
回复

使用道具 举报

 楼主| 发表于 5-8-2008 10:24 AM | 显示全部楼层
接下来的show method我已经有头绪要怎样了
就是sql把我头搞大了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 26-12-2025 01:16 AM , Processed in 0.139725 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表