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

MS SQL下法問題

尚未結案
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-10 09:49:43 IP:219.68.xxx.xxx 未訂閱
各位先進大家好,小弟有各SQL問題想跟大家請教一下:
Table定義如下
id code1 code2 code3
1  1     1     1
2  2     2     2
3  3     3     3    code name
1    a
2    b
3    c    小弟想要得到
id code1 code2 code3
1  a     a     a
2  b     b     b
3  c     c     c
然後將上面的資料根據條件再Select一次,得到最後的結果,如:
id name1 name2 name3
1  a     a     a    小弟的作法是將code1,code2,code3去join出name的資料,然後因為還要下條件,因此再把他包起來Select一次
,因為有兩層要去join,因此sql變的很冗長,想請教各位先進,是否有比較好的sql下法,或者改變資料的定義方式,能夠簡單的來達成這樣的結果。
小弟用的是MSSQL,如果有表達不是很完整,請多多包涵。    小弟sql的下法如下:
SELECT         DataRank1.DataRank1, DataRank2.DataRank2 AS Expr1
FROM             (SELECT         tb_dept.dept_DataRank AS DataRank1
                           FROM              tb_admin INNER JOIN
                                                      tb_dept ON 
                                                      tb_admin.admin_department_ = tb_dept.dept_id INNER JOIN
                                                      tb_member ON tb_admin.admin_id_ = tb_member.sales) 
                          DataRank1 CROSS JOIN
                              (SELECT         tb_dept.dept_DataRank AS DataRank2
                                FROM              tb_admin INNER JOIN
                                                           tb_dept ON 
                                                           tb_admin.admin_department_ = tb_dept.dept_id INNER JOIN
                                                           tb_member ON tb_admin.admin_id_ = tb_member.sales) 
                          DataRank2
WHERE         (DataRank1.DataRank1 = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')    上面是只有兩個欄位的下法,還沒作實際資料測試,所以可能還有問題。
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-12 12:27:37 IP:203.70.xxx.xxx 未訂閱
[t1]
id code1 code2 code3
1  1     1     1
2  2     2     2
3  3     3     3    [t2]
code name
1    a
2    b
3    c        select a.id, replace(a.code1, a.code1, (select name from t2 where code=a.code1)) , 
                 replace(a.code2, a.code2, (select name from t2 where code=a.code2)) ,               
                 replace(a.code3, a.code3, (select name from t2 where code=a.code3))               
from t1 a where id='1'    如果不想在sql 內取代
也可以直接    select a.id, a.code1, a.code2, a.code3 from t1 a where id='1'
結果出來以後再自己取代1=>a, 2=>b, 3=>c @瞭解越多.懂得越少@ 發表人 - chris_shieh 於 2005/09/12 14:47:10
Fishman
尊榮會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-12 13:46:28 IP:210.65.xxx.xxx 未訂閱
Hi supman,    1.建立一個使用者自訂函數,傳入一個 code 並回傳 Name
CREATE FUNCTION P1(
    @P_CODE INT)
RETURNS VARCHAR(50)
    BEGIN
        IF (@P_CODE IS NULL)
            RETURN NULL
        RETURN
           (SELECT  NAME
            FROM    T2
            WHERE   CODE = @P_CODE)
    END
PS:不太熟 MS SQL,寫的不好敬請見諒 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=24489759&CC=547701"> T2內容: 呼叫用者自訂函數結果

SELECT  id,
        dbo.p1(code1) AS name1,
        dbo.p1(code2) AS name2,
        dbo.p1(code3) AS name3
FROM    T1
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
系統時間:2024-06-24 19:58:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!