我有一個非常簡單的問題:是否可以根據滿足哪個條件來檢索行? 例如,我有一張人的桌子,我想檢索名稱以「I」開頭,或以「ster」結尾或包含「lo」的所有人,根據這些人的條件。首先匹配第一個條件的行,然後匹配第二個條件的行,依此類推。 (不重複:如果行符合第一個條件,它不應再爲第二個條件顯示)根據符合哪種條件來排序?
編輯: 我用Visual C#工作,我管理與MS訪問數據庫。 (文件格式的.mdb,如果該事項)
謝謝=)
我有一個非常簡單的問題:是否可以根據滿足哪個條件來檢索行? 例如,我有一張人的桌子,我想檢索名稱以「I」開頭,或以「ster」結尾或包含「lo」的所有人,根據這些人的條件。首先匹配第一個條件的行,然後匹配第二個條件的行,依此類推。 (不重複:如果行符合第一個條件,它不應再爲第二個條件顯示)根據符合哪種條件來排序?
編輯: 我用Visual C#工作,我管理與MS訪問數據庫。 (文件格式的.mdb,如果該事項)
謝謝=)
Somet興這樣應該工作:
SELECT * FROM people
ORDER BY
CASE WHEN name LIKE "I%" THEN 0
WHEN name LIKE "%ster" THEN 1
WHEN name LIKE "%lo%" THEN 2
ELSE 3
END ASC;
在訪問你可能不得不求助於嵌套IIF()
小號雖然:
ORDER BY
IIF(name LIKE "I%", 0,
IIF(name LIKE "%ster%", 1,
IIF(name LIKE "%lo%", 2,
3
))) ASC
+1 ...正確順序爲Access – 2012-04-10 18:36:16
作品,謝謝:) – 2012-04-10 18:36:38
一般來說,你可以把一個case語句在order by
。
這將在SQL Server中工作,例如:
order by (case when myCol like 'I%' then 1 when myCol like '%ster' then 2 when myCol like '%lo%' then 3 end)
是否使用的是DBMS?
UPDATE
對於MS-Access,您可以使用IIF
語句如圖這樣的回答:
ms-access-complicated-order-by
基於這一點,你可能想沿着東西線:
SELECT *
FROM people
WHERE [name] Like "I*" Or [name] Like "*ster" Or [name] Like "*lo*"
ORDER BY IIf([name] Like "I*", 1, IIf([name] Like "*ster", 2, IIf([name] Like "*lo*", 3, 4)));
我編輯了原文,讓所有人都可以看到。 – 2012-04-10 17:57:41
@Itamar Marom,請讓我知道這是否有效,如果語法稍微偏離(不幸的是我現在無法檢查),請在此處編輯最終的Access查詢。 – 2012-04-10 18:23:50
當我嘗試運行時,它要求'sortCol'好像它是一個參數... – 2012-04-10 18:31:23
我給了這是一個用Postgres的射門,但我會假設你可以使用與其他數據庫類似的技術。我會爲每個條件創建一個列,以返回條件是否滿足的布爾表達式。然後,命令由該列:
select
substr(Name, 1, 1) = 'I' as StartsWithI,
Name like '%ster' as EndsWithSter
from MyTable
order by StartsWithI desc, EndsWithSter desc
UPDATE:
我張貼了這個答案後添加ms-access
標籤,但如果它可以幫助任何人,我會離開它。
Switch
的函數比一堆嵌套IIf
語句更可讀:
SELECT * FROM [People]
WHERE [Name] Like "I*"
OR [Name] Like "*ster"
OR [Name] Like "*lo*"
ORDER BY Switch([Name] Like "I*", 1,
[Name] Like "*ster", 2,
True, 3)
Switch
用於通過傳遞條件參數對:結果。對參數1進行評估,如果爲true,則函數返回參數2.如果參數1爲假,則對參數3進行評估等。
請注意使用True
作爲倒數第二個參數,它的作用類似於CASE ELSE
。
請注意,根據具體情況,您可能需要將*
轉換爲%
。有關更多信息,請參見Why does LIKE behave differently when being called from VB6 app?。
不可能通過標準的sql。你可以通過編程來完成,但是如果你將結果集檢索到Java,C#等等 – ControlAltDel 2012-04-10 17:53:22
不,這在標準SQL中是完全可能的。這只是一點點參與取決於一些細節。 – RBarryYoung 2012-04-10 17:57:47
真正的問題是,Access支持標準SQL的一個較小的子集,而不是比較大的DBMS(比如SQL Server,Oracle,DB2等),因此可能不支持所有不同的方法。 – RBarryYoung 2012-04-10 18:01:15