【问题标题】:SQL Select Certain Value FirstSQL 先选择某个值
【发布时间】:2011-08-08 00:09:53
【问题描述】:
SELECT     AssetValue
FROM         Assets
WHERE     (AssetType = 'Country')

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

Afghanistan
Albania
Algeria
....

如何让美国和加拿大出现在这上面?这是否可以使用 SQL 或者我需要在我的 ASP 代码中做些什么?我的 PK 是一个 INT 身份。

【问题讨论】:

  • 一般按Assets表的主键排序。尝试将美国和加拿大的主键(假设它存在)设置为尽可能低的值,这应该可行。
  • 如果是我,我会选择在您的 ASP 代码中执行此操作。这是一个演示问题。如果我要在服务器端处理它,我会在 Assets 表中放置一个序数列,并在该值上“排序”。
  • 即使使用 SQL 是可能的,我认为通过在 asp 代码中执行它会赢得性能。
  • 主键通常是随机选择的,只为一个查询更改它们不是一个好主意。如果对于未来的查询,只有美国需要排在首位怎么办?见下文马丁的回应。这是解决这个问题的更合适的方法。

标签: sql sql-server sql-server-2005 select


【解决方案1】:

给他们一个组 ID,所以第 1 组是美国、英国等,第 2 组是世界其他地区,那么你可以做“优先”国家。

【讨论】:

    【解决方案2】:
    SELECT     AssetValue
    FROM         Assets
    WHERE     (AssetType = 'Country')
    ORDER BY CASE AssetValue 
              WHEN 'US' THEN 1 
              WHEN 'Canada' THEN 2 ELSE 3 END, AssetValue 
    

    【讨论】:

    • 好主意!我通常在输出结果集中添加一列,并对其进行排序,但是将排序值放在 ORDER BY 子句中是一种很好的方法。
    • @Francois- 这种方法可以更好地使用索引,但看起来这可能是某种类型的 EAV 事物,其中 AssetValue 列无论如何都包含不同的事物(不仅仅是国家)。
    • 短期内解决方案很好,但是,它是一个硬编码的解决方案。从外观上看,Assets 是一个通用表。如果将“US”更改为“United States”会怎样?如果 OP 需要在其他资产类型中进行这种排序怎么办?如果他需要这种灵活性,他需要寻求更通用的解决方案。
    • 我同意@Adrian。这是一个很好的解决方案,但我不会将其作为长期解决方案。从长远来看,我也不会指望剩余的 AssetValues 按特定顺序返回。
    • 短期内这应该对我有用,但我会尽快添加新列以确定订单偏好。这首先是我的目标,但我还不能编辑数据库。所以谢谢大家。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      • 2019-03-20
      相关资源
      最近更新 更多