作爲查詢我有以下的(我窗臺穿着學習者徽章!)的一部分......排序問題
SELECT
Main.Ax,
Main.Ay,
(select Astr from Afull where Avalid = Main.Ax) as AxStr,
(select Astr from Afull where Avalid = Main.Ay) as AyStr,
Switch(AxStr>=0, AxStr,AxStr<0,0,isnull(AxStr),0)
+ Switch(AyStr>=0, AyStr,AyStr<0,0,isnull(AyStr),0) as AStrTotal
FROM Main
不過,我有一個問題,當我嘗試包括在Order By 5 Asc
它不起作用。我猜這與前面2個子查詢有關(然後AStrTotal將它們加在一起)。
此外,是否有可能在不必使用絕對位置的情況下引用別名字段位置(對於AStrTotal爲5,以上)?
編輯:更多的背景信息...
表的主要(將被搜索主數據庫)包括2個字段Ax和Ay
Ax Ay
1 6
5 9
3 3
7
5 5
7 2
2
4 4
3
6 5
7 6
等....空白項以上僅僅是空值。 Ax和Ay值可以出現在任何一個字段中。
表AFULL包括2個字段稱爲AVALID和黃芪甲甙...
Avalid AStr
1
2
3
4
5
6
7
8
9
領域黃芪甲甙在每個運行開始初始化爲空。 該表的第一個用途是將Ax和Ay的所有有效值存儲在字段Avalid中。第二種用途是允許用戶選擇搜索標準。爲此,將表格Afull作爲用戶搜索表單中的子表單添加。然後,用戶通過向Astr中輸入任何大於0的值 - 在要搜索的值旁輸入一個Avalid值來搜索。後來,黃芪甲甙的值(可變數字,指示強度)將在ORDER BY
SQL查詢串被用於隨後建立起來,其目的是返回攜帶任何用戶選擇AVALID的「置換」的所有記錄值
我現在已經減少了原始查詢...
SELECT
Main.Ax,
Main.Ay,
(select Astr from Afull where Avalid = Main.Ax) as AxStr
FROM Main
再加入...
ORDER BY (select Astr from Afull where Avalid = Main.Ax) ASC;
但我在ORDER BY中得到一個語法錯誤。去除括號並沒有幫助。
你應該能夠'JOIN' /'LEFT JOIN'(取決於你是否總會有行或不)'Afull',這將_possibly_更高性能。 'MAX(...)'/'COALESCE(...)'會讓你的意圖更加明顯,但我懷疑它會有什麼幫助。 –