全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2144
推到 Plurk!
推到 Facebook!

請教調出一整個部門的sql語法?

答題得分者是:James
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-13 15:21:33 IP:210.61.xxx.xxx 未訂閱
資料表如下 請教我要用什麼sql才能調出所屬經理王阿三這一掛的成員出來? 謝謝您的幫助!
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-13 16:18:55 IP:211.74.xxx.xxx 未訂閱
Hi pedro您好:    我覺得這樣Table設計不太好,您覺得呢? 我之前也有遇到類似的Case,比方說要抓ID=100下面所有的成員.. 要用一個SQL 兜我不確定是否可以, 但是一定很複雜. 小弟最後用Function來解決.. 給您做參考    以Oracle 為例: getTopID 邏輯就是傳入ID, 傳回最上端的ID. SQL就變成很單純 Select Name,Title,ID from table where getTopID(ID)=100 ~悠遊法國號~
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-13 17:01:10 IP:210.65.xxx.xxx 未訂閱
Hi pedro,    以 Oracle 為例
select  level,
        p.*
from    fish_test p
connect by relation = prior id
start with id = 100
資料如下: 結果如下: 至於 SQL Server,則沒有研究,看看其他大大是否有解 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-13 17:20:42 IP:210.61.xxx.xxx 未訂閱
謝謝yachanga及Fishman前輩回應, 不過期待有人能回sql-server 我用的是ms-sql Fishman的解惑很接近, 感覺上答案快出來了, 我想了一個下午了說 發表人 - pedro 於 2004/04/13 17:27:23
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-13 20:36:02 IP:218.32.xxx.xxx 未訂閱
Fishman 兄果然功力深厚.
James
高階會員


發表:10
回覆:290
積分:220
註冊:2002-07-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-14 00:02:05 IP:218.170.xxx.xxx 未訂閱
CREATE FUNCTION test ( @ID char(10) )
RETURNS @mock TABLE ( field1  char(10)  primary key,  field2 char(10), field3 int )
AS
BEGIN
   DECLARE @level int
--   DECLARE @mock TABLE ( field1  char(10)  primary key,  field2 char(10), field3 int )
   SET @level = 0
   INSERT @mock
   SELECT ID, Relation, 0 FROM a WHERE ID = @ID 
   WHILE @@rowcount > 0
   BEGIN
      SET @level = @level   1
      INSERT @mock
         SELECT ID, Relation, @level FROM a
         JOIN @mock on field1 = Relation  and field3 = @level - 1
   END
   RETURN
END
GO    -- select * from test('100')
參考看看
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-14 09:22:05 IP:210.61.xxx.xxx 未訂閱
感謝眾位前輩高手的相助, 讓小弟欽佩不已 James兄, 真是謝謝您, 很酷
James
高階會員


發表:10
回覆:290
積分:220
註冊:2002-07-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-14 11:06:36 IP:61.218.xxx.xxx 未訂閱
不客氣 ,只是目前這個 UDF 的解法並不是最好的方法 ,因為在速度上 效能不見得最好 ,如果有機會的話 , 可以試試看把 Tree 轉成矩陣的 方式去儲存 ,那樣雖然會浪費不少儲存空間 ,但速度是最快的 !!!
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-08-25 08:58:03 IP:122.116.xxx.xxx 未訂閱
您好,

我是笨人都用笨法

您的 id 欄已很有結構, 好像用不到 relation
select * from tablename where id like '1%'

要找部門頭的話
select distinct substr(id,1,1) id0 from tablename

select substr(id,1,1) id0 from tablename where substr(id,2,2)='00'
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-08-25 08:59:08, 註解 無‧
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-08-25 17:56:00 IP:60.248.xxx.xxx 未訂閱
恩,若只是找部門,是這樣沒錯,
但不夠嚴謹,
其實我要找的是類似BPM或HR裡,找到該部門裡所有成員,不管有無中階主管

===================引 用 st33chen 文 章===================
您的 id 欄已很有結構, 好像用不到 relation
select * from tablename where id like '1%'

要找部門頭的話
select distinct substr(id,1,1) id0 from tablename

select substr(id,1,1) id0 from tablename where substr(id,2,2)='00'
編輯記錄
pedro 重新編輯於 2009-08-25 17:56:30, 註解 無‧
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-09-03 11:10:59 IP:61.218.xxx.xxx 訂閱
select a.title,a.id,a.name ,主管=b.name
from emp a,emp b
where a.relation *=b.id

------
OS : Win 7 pro
Program : Delphi 7
DataBase : Ms Sql 2008
系統時間:2024-04-27 2:38:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!