代码之家  ›  专栏  ›  技术社区  ›  Brandon

按char(1)列对结果排序

  •  0
  • Brandon  · 技术社区  · 15 年前

    我有一个存储过程,基本上

    select top 1 expiryDate, flag, (bunch of other columns)
    from someTable
    (bunch of joins)
    order by expiryDate desc
    

    所以这将获取最后过期的记录。这在大多数情况下都有效,但有些记录的标志是 char(1) . 大多数时候只是 Y N .

    所以它会像

    2010-12-31    N
    2010-10-05    Y
    2010-08-05    N
    2010-03-01    F
    2010-01-31    N
    

    大多数情况下,这是可行的,但是有没有办法按照flag列排序呢?所以我想把结果按 Y 然后 n F 任何其他的旗子都可以按任何顺序排在最后。我以为这只是一个顺序,但由于旗子不是按字母值加权的,我有点困惑。(注:这些不是我的桌子,我不知道使用这样的字符是不是一个好主意,但这不是我可以改变的东西)。

    2 回复  |  直到 15 年前
        1
  •  3
  •   CResults    15 年前

    你需要案件陈述的帮助

    Order By expiryDate desc, 
    
       CASE flag
          When 'Y' THEN 1
          When 'N' THEN 2
          When 'F' THEN 3
          ELSE 999
       END ASC
    
        2
  •  -1
  •   Cade Roux    15 年前

    您可以按几列排序:

    select top 1 expiryDate, flag, (bunch of other columns)
    from someTable
    (bunch of joins)
    order by flag /* asc/desc */, expiryDate desc