2016-09-22 90 views
0

我使用以下查詢來填充業務目錄表結果的下拉字段。tsql填充下拉列表保留默認選項頂部

select 'Select a City' as City, 'All' as Value 
UNION ALL 
select distinct City, City as Value from BND_Listing 
where isnull(City,'') <> '' 
Order by City ASC 

我想保持我在列表頂部的「選擇一個城市」,而不是把它按字母順序排列,但保持一切相同。

這可能嗎?

+2

請注意,請考慮接受對您以前的問題的正確答案....它鼓勵其他人幫助你。乾杯。 http://stackoverflow.com/questions/39626354/order-by-select-statement-using-union-distinct http://stackoverflow.com/questions/39624368/t-sql-query-to-search-table領域的關鍵字 http://stackoverflow.com/questions/39542201/sql-split-string-as-key-identity-value 等... – scsimon

+0

你好@scsimon是的,我要回答這些現在的主題。我最終使用原始查詢,因爲插件端存在一個錯誤,所以輸入值得高度讚賞,但在一天結束時,我終於堅持原始查詢,並且我無法在同一天回答自己的問題。 – UserSN

+0

聽起來不錯Alex。 – scsimon

回答

1
with cte as(
select 'Select a City' as City, 'All' as Value 
UNION ALL 
select distinct City, City as Value from BND_Listing 
where isnull(City,'') <> '') 


select * from cte Order by case when City = 'Select a City' then 1 else 2 end, City ASC 
+0

給我錯誤消息:如果語句包含UNION,INTERSECT或EXCEPT運算符,則ORDER BY項必須出現在選擇列表中。 – UserSN

+1

@AlexP將其包裝在CTE中以使其更容易 – scsimon

+0

謝謝@scsimon這個作品!我將讀到關於「包裝」的概念,我看到它經常使用和cte。我還是個新手,需要更長的時間才能理解什麼讓事情成功而不是。 – UserSN

1

另一種方式來處理,這將是:

-- sample data 
DECLARE @BND_Listing TABLE (City varchar(100) UNIQUE); 
INSERT @BND_Listing VALUES ('Chicago'),('New York'),('LA'); 

-- solution 
SELECT City, Value 
FROM 
(
    SELECT 0 as oGroup, 'Select a City' as City, 'All' as Value 
    UNION ALL 
    SELECT DISTINCT 1, City, City FROM @BND_Listing 
    WHERE City IS NOT NULL AND City <> '' 
) prep 
ORDER BY oGroup; 

前提是你對城市的指數,你會得到你的結果,而不排序(我用我的DDL的UNIQUE約束創建一個)在執行計劃中。

+0

感謝你的例子。以前的答案讓它爲我工作。我將不得不閱讀一些關於索引的內容,以及它們可以用來做什麼。我目前正在尋找一些關於國家/國家的索引,因爲就目前而言,我從scsimon使用的查詢正在將數據輸入到我的BND_Listing表中。但我存儲的國家縮寫同樣適用於國家,我想將這些縮寫顯示爲完整的州/國家/地區。感謝您的回答! – UserSN