|
查看: 1249|回复: 36
|
请帮帮我combine tis 2 query statement[已解决]
[复制链接]
|
|
|
据我没上贴时的搜索,网路上的都有自己的条件优先,所以不太适合大众用
这个贴很好用,尤其在处理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 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 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做得太多了,晕 @@ |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 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 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 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? |
|
|
|
|
|
|
|
|
|
|
发表于 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把我头搞大了 |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|