我使用下面的查询来填充值的下拉列表。
select 'Select a City' as City, 'All' as Value
UNION ALL
select distinct City, City as Value from BND_Listing
我想把结果按A-Z排序。我尝试了以下方法:
select 'Select a City' as City, 'All' as Value
UNION ALL
select distinct City, City as Value from BND_Listing
ORDER BY City ASC
但是我得到一个错误:
关键字'Union'附近语法错误。
此外,该查询正在提取"Blank or NULL"值,并在下拉列表的顶部显示空白。如果可能的话,我想隐藏这一点。不显示任何空值?
您想添加一行到您的结果,它总是在顶部并携带NULL作为ID?
试试这个:
SELECT *
FROM
(
SELECT NULL AS col1,'select an object' AS col2,0 AS SortInx
UNION ALL
SELECT TOP 10 object_id,name,ROW_NUMBER() OVER(ORDER BY name)
FROM sys.objects
) AS Sortable
ORDER BY SortInx
简短说明:ROW_NUMBER()
以1
开头,因此第一行以0
作为排序索引。从1到x的数字表示已排序的名称的顺序。
外部SELECT
将再次对结果集进行排序,确保0在前面,1到x在后面…
我同意这里的大多数评论,其中最好的方法实际上是在应用程序本身中添加"Select a Value"行。最好让数据库只向应用程序提供"实际"数据,并在代码中处理类似的事情。
我也不确定这个项目是什么,但如果你有权限,我强烈建议在数据库级别创建视图和/或存储过程,以从应用程序中抽象任何数据库模式和逻辑更改。
出于好奇,你为什么用不同的别名两次选择相同的字段?我假设您在一个简单的HTML下拉菜单中设置了显示值和实际值,但在本例中,值是相同的,因此您只能在结果集中有一个字段,并在应用程序中引用该值两次。这样做将解决您最初问题的问题,并简化您的查询(尽管如此简单的查询无论如何都可以忽略不计成本),看起来像这样:
SELECT DISTINCT City
FROM BND_Listing (NOLOCK)
WHERE City IS NOT NULL
ORDER BY 1 ASC
根据数据,DB配置等,您可能需要考虑空字符串和/或前导/尾随空格,如下所示:
SELECT DISTINCT LTRIM(RTRIM(City)) AS City
FROM BND_Listing (NOLOCK)
WHERE LTRIM(RTRIM(City)) <> ''
AND City IS NOT NULL
ORDER BY 1
对不起…我知道这可能有点夸张,但你说你是新的SQL,所以我想我只是分享,以防你的NULL结果实际上是空字符串。
感谢大家的回复,它给了我很多关于在哪里寻找我的问题的见解。原来的查询添加了以下内容,得到了正确的结果。
工作查询: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
, 'Select a City'总是在下拉菜单的顶部。感谢@scsimon在我的另一个帖子。
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