Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL首先选择某个值_Sql_Sql Server_Sql Server 2005_Select - Fatal编程技术网

SQL首先选择某个值

SQL首先选择某个值,sql,sql-server,sql-server-2005,select,Sql,Sql Server,Sql Server 2005,Select,非常简单的Select语句,但它输出 SELECT AssetValue FROM Assets WHERE (AssetType = 'Country') 我如何使美国和加拿大出现在这上面?这是SQL实现的还是我需要在ASP代码中做些什么?我的PK是一个整数标识。给他们一个组ID,所以组1是美国、英国等,组2是世界其他国家,然后你可以选择“优先”国家。如果你不想硬编码,最通用的解决方案是有一个额外的字段来指示优先项目。您可以将其称为OrderPreferenc

非常简单的Select语句,但它输出

SELECT     AssetValue
FROM         Assets
WHERE     (AssetType = 'Country')

我如何使美国和加拿大出现在这上面?这是SQL实现的还是我需要在ASP代码中做些什么?我的PK是一个整数标识。

给他们一个组ID,所以组1是美国、英国等,组2是世界其他国家,然后你可以选择“优先”国家。

如果你不想硬编码,最通用的解决方案是有一个额外的字段来指示优先项目。您可以将其称为
OrderPreference
。OrderPreference越高,项目出现的时间越早。其他所有项目的OrderPreference都等于零。查询:

Afghanistan
Albania
Algeria
....
SELECT     AssetValue
FROM         Assets
WHERE     (AssetType = 'Country')
ORDER BY CASE AssetValue 
          WHEN 'US' THEN 1 
          WHEN 'Canada' THEN 2 ELSE 3 END, AssetValue 

从外观上看,资产是一个用于其他事物(不仅仅是国家)的表,因此,如果出现其他资产类型,您可以使用此方法来解决它们的相同问题。

它通常按
资产
表的主键排序。尝试将美国和加拿大的主键(假设存在)设置为可能的最低值,这样应该可以工作。如果是我,我会选择在ASP代码中这样做。这是一个演示问题。如果我要在服务器端解决这个问题,我会在资产表上放一个序号列,在该值上放一个“order by”。即使使用SQL是可能的,我认为在asp代码中这样做可以提高性能。主键通常是随机选择的,只为一个查询更改它们不是一个好主意。如果在未来的查询中,只有美国需要在顶部,该怎么办?见下面马丁的回答。这是解决这个问题更合适的方法。好主意!我通常会向输出结果集中添加一列,并对其进行排序,但将排序值放入order BY子句中是一种很好的方法。@Francois-这种方法可以更好地使用索引,但看起来这可能是某种EAV类型的事情,
AssetValue
列包含不同的内容(不仅仅是国家)。解决方案在短期内是好的,但是,它是一个硬编码的解决方案。从外观上看,资产是一个通用表。如果“US”改为“US”会怎么样?如果OP需要在其他资产类型中进行这种排序会怎么样?如果他需要这种灵活性,他将需要使用更通用的解决方案。我同意@Adrian。这是一个g重新考虑,但我不会将此作为长期解决方案。我也不会指望剩余的资产价值在长期内以特定顺序返回。短期内,这对我来说应该是可行的,但我会尽快添加新列以确定顺序偏好。这是我的首要目标,但我无法编辑数据库到目前为止,谢谢大家。
SELECT     AssetValue
FROM         Assets
WHERE     (AssetType = 'Country')
ORDER BY OrderPreference desc, AssetValue