請教一個SQL語法 |
尚未結案
|
Becca
一般會員 發表:5 回覆:7 積分:2 註冊:2003-10-16 發送簡訊給我 |
各位大大,我執行一個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 發送簡訊給我 |
|
Becca
一般會員 發表:5 回覆:7 積分:2 註冊:2003-10-16 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
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 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
|
Becca
一般會員 發表:5 回覆:7 積分:2 註冊:2003-10-16 發送簡訊給我 |
|
懷舊的人
高階會員 發表:28 回覆:152 積分:141 註冊:2003-01-08 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |