2011-04-18 40 views
5
SELECT  AssetValue 
FROM   Assets 
WHERE  (AssetType = 'Country') 

非常簡單的SELECT語句,但它輸出SQL SELECT一定的價值首先

Afghanistan 
Albania 
Algeria 
.... 

如何使美國和加拿大出現在此之上?這可能與SQL或我需要在我的ASP代碼中做些什麼?我的PK是一個INT身份。

+0

它通常在您的「資產」表的主鍵上訂購。嘗試設置美國和加拿大的主鍵(假設它存在)儘可能低的值,這應該工作。 – 2011-04-18 15:46:39

+2

如果是我,我會選擇在你的ASP代碼中這樣做。這是一個演示問題。如果我要解決它的服務器端,我會在資產表上放置一個序號列,並在該值上「排序」。 – 2011-04-18 15:48:46

+0

即使SQL有可能,我想你會在asp代碼中贏得性能。 – Niklas 2011-04-18 15:49:03

回答

21
SELECT  AssetValue 
FROM   Assets 
WHERE  (AssetType = 'Country') 
ORDER BY CASE AssetValue 
      WHEN 'US' THEN 1 
      WHEN 'Canada' THEN 2 ELSE 3 END, AssetValue 
+0

好主意!我通常在輸出結果集中添加一列,然後對其進行排序,但將排序值放入ORDER BY子句中是一種很好的方法。 – 2011-04-18 15:50:03

+0

@ Francois-該方法可以更好地使用索引,但看起來好像這可能是某種類型的EAV事物,其中AssetValue列包含不同事物的混合物(不僅僅是國家)。 – 2011-04-18 15:55:01

+2

解決方案在短期內很好,但是,它是一種硬編碼解決方案。從外觀上看,Assets是一張通用表格。如果'美國'改爲'美國'會怎麼樣?如果OP有需要在其他資產類型中進行這種排序,該怎麼辦?如果他需要這種靈活性,他將需要尋求更通用的解決方案。 – 2011-04-18 15:55:17

1

給他們一個組ID,所以第1組是美國,英國等,第2組是世界其他地方,那麼你可以做「優先」國家。

4

如果你不想硬編碼,最通用的解決方案是有一個額外的領域來指示優惠項目。你可以稱它爲OrderPreference。較高的OrderPreference,該項目將出現的第一個。其他每個項目都有OrderPreference等於零。查詢:

SELECT  AssetValue 
FROM   Assets 
WHERE  (AssetType = 'Country') 
ORDER BY OrderPreference desc, AssetValue 

通過外觀上來看,資產是你用其他的東西(不僅是國家)的表,所以你可以用這種方法來解決其他資產類型相同的問題,如果他們來了向上。

+0

+1不止一種方法去皮膚貓! – 2011-04-18 16:03:23