線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1486
推到 Plurk!
推到 Facebook!

請教一個SQL語法

尚未結案
Becca
一般會員


發表:5
回覆:7
積分:2
註冊:2003-10-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-09 18:19:36 IP:211.23.xxx.xxx 未訂閱
各位大大,我執行一個SQL COMMAND出現錯誤訊息:"ORDER BY items must appear in the select list if SELECT DISTINCT is specified."  但是我檢查過了,我不知道錯誤在哪,不知道有無人可以幫我指點迷津,謝謝!!    SELECT DISTINCT FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5 FROM TABLE_NAME ORDER BY CASE WHEN (FIELD_2='AA') THEN ('FIELD_1,FIELD_3')                WHEN (FIELD_2='BB') THEN ('FIELD_4,FIELD_3')                ELSE ('FIELD_5,FIELD_3') END    (ps.如果我將DISTINCT拿掉就可以正常執行,但是我不懂為什麼,而且我必須要用到DISTINCT)
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-10 00:06:13 IP:220.132.xxx.xxx 未訂閱
Hi, 請問你的資料庫種類? 錯誤訊息是說你的 order by 的資料必須出現在 select 中, 當你使用 distinct, 解決方法可以利用 subquery 處理.
Becca
一般會員


發表:5
回覆:7
積分:2
註冊:2003-10-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-10 09:18:30 IP:211.23.xxx.xxx 未訂閱
我使用的資料庫是SQL SERVER 2000, 我知道錯誤訊息的意思, 只是我不了解的是, 我已經將所有用到order by的欄位都放在select中了, 但是還是不行!! 我該如何下command會比較好, 請問可以為我解答嗎?
pedro
尊榮會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-10 10:05:21 IP:210.61.xxx.xxx 未訂閱
hi Becca 試試使用二段式處理 SELECT FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5 from ( SELECT DISTINCT FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5 FROM TABLE_NAME ) as tmp ORDER BY CASE WHEN (FIELD_2='AA') THEN ('FIELD_1,FIELD_3') WHEN (FIELD_2='BB') THEN ('FIELD_4,FIELD_3') ELSE ('FIELD_5,FIELD_3') END ................... .楛耕傷稼,楛耘失歲. ...................
Becca
一般會員


發表:5
回覆:7
積分:2
註冊:2003-10-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-10 11:28:41 IP:211.23.xxx.xxx 未訂閱
pedro, 您好:    您的方法我試了! 的確可行, 但是排序也亂掉了, 不論FIELD_2的值為何 他都只會依第一個排序內容來排序 (也就是說這次我下的條件剛好是要依照第二個排序 WHEN (FIELD_2=''BB'') THEN (''FIELD_4,FIELD_3'') 來排的, 但是他卻依照第一個(''FIELD_1,FIELD_3'') 來做排序) 為何會這樣呢??
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-11 10:30:22 IP:203.204.xxx.xxx 未訂閱
SELECT DISTINCT FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5 FROM TABLE_NAME ORDER BY CASE WHEN (FIELD_2='AA') THEN ('FIELD_1,FIELD_3') WHEN (FIELD_2='BB') THEN ('FIELD_4,FIELD_3') ELSE ('FIELD_5,FIELD_3') END 錯誤訊息是幫助除錯, 有時候無法 100% 正確說出問題所在 您的 SQL 複雜, 某些功能搭在一起, 超出 SQL SERVER 2000 能正確 Parse 處理的情形, 想辦法用別的方式處理吧 (拆開成幾個 SQL) ********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-11 11:35:11 IP:220.132.xxx.xxx 未訂閱
Hi, 你的 order by 後要加的是欄位或是值? 看你的語法是不正確的下法, 因為你的 case when .. then 是一個固定的值並非欄位名(也就是排序欄位值)啊, 這樣就一定達不到你要的排序功能啊. 請改為這樣下試試, SELECT FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5 from ( SELECT DISTINCT FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5 FROM TABLE_NAME ) as tmp ORDER BY CASE WHEN (FIELD_2='AA') THEN FIELD_1 WHEN (FIELD_2='BB') THEN FIELD_4 ELSE FIELD_5 END ,FIELD_3
Becca
一般會員


發表:5
回覆:7
積分:2
註冊:2003-10-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-13 09:31:11 IP:211.23.xxx.xxx 未訂閱
timhuang,您好,我知道您的意思,我想我舉例有點失當,因為我排序的內容不只一個欄位,我變換個內容舉例,比較能呈現我的困難處: ORDER BY CASE WHEN (FIELD_2='AA') THEN ('FIELD_1,FIELD_2')  WHEN (FIELD_2='BB') THEN ('FIELD_4,FIELD_1,FIELD_3')  ELSE ('FIELD_5,FIELD_4,FIELD_1') END 也就是如果FIELD_2='AA', 則我想要排序的欄位順序是FIELD_1,FIELD_2 如果FIELD_2='BB', 則我想要排序的欄位順序是FIELD_4,FIELD_1,FIELD_3 如果FIELD_2是其他值,則我想要排序的欄位順序是FIELD_5,FIELD_4,FIELD_1
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-13 10:34:57 IP:203.95.xxx.xxx 未訂閱
那確認一下, 你要排序是混在一起嗎? 或是會因為 Field_2 的值不同, 整群有先後順序呢?
Becca
一般會員


發表:5
回覆:7
積分:2
註冊:2003-10-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-13 11:25:24 IP:211.23.xxx.xxx 未訂閱
您好,要依 Field_2 的值不同,  而有不同的排序方式(整群有先後順序)! 例如: FIELD_2='AA', 則要依客戶"所屬區域","客戶代號"兩個欄位來排序 如果FIELD_2='BB', 則要依"訂單日期","訂單代號","發票號碼"三個欄位來排序 如果FIELD_2是其他值,則要依"客戶代號","訂單日期","郵遞區號"三個欄位來排序 (我要的大概就是這樣,這只是舉例)
懷舊的人
高階會員


發表:28
回覆:152
積分:141
註冊:2003-01-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-13 12:16:13 IP:211.78.xxx.xxx 未訂閱
請搭配 UNION
Fishman
尊榮會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-13 12:58:06 IP:210.65.xxx.xxx 未訂閱
Hi Becca,    插一下花!試試看這樣下:
SELECT  A.*
SELECT  A.*
FROM   (SELECT  DISTINCT 
                FIELD2,
                所屬區域,
                客戶代號,
                訂單日期,
                訂單代號,
                發票號碼,
                郵遞區號
        FROM    TABLE1) A
ORDER BY
        FIELD2,
        CASE FIELD2 
            WHEN 'AA' THEN 所屬區域
            WHEN 'BB' THEN 訂單日期
            ELSE 客戶代號
        END,
        CASE FIELD2 
            WHEN 'AA' THEN 客戶代號
            WHEN 'BB' THEN 訂單代號
            ELSE 訂單日期
        END,
        CASE FIELD2 
            WHEN 'AA' THEN 'XX' --無第三個排序條件
            WHEN 'BB' THEN 發票號碼
            ELSE 郵遞區號
        END    或是    SELECT  DISTINCT 
        FIELD2,
        所屬區域,
        客戶代號,
        訂單日期,
        訂單代號,
        發票號碼,
        郵遞區號,
        CASE FIELD2 
            WHEN 'AA' THEN 所屬區域
            WHEN 'BB' THEN 訂單日期
            ELSE 客戶代號
        END AS A1,
        CASE FIELD2 
            WHEN 'AA' THEN 客戶代號
            WHEN 'BB' THEN 訂單代號
            ELSE 訂單日期
        END AS A2,
        CASE FIELD2 
            WHEN 'AA' THEN 'XX' --無第三個排序條件
            WHEN 'BB' THEN 發票號碼
            ELSE 郵遞區號
        END AS A3
FROM    TABLE1 A
ORDER BY
        FIELD2,A1,A2,A3    或是    ......    還有很多寫法,不再一一贅述
發表人 -
------
Fishman
系統時間:2024-06-26 23:15:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!