仅从第 2 行开始在 SQL 服务器中使用 ORDER BY
Use ORDER BY in SQL Server starting from row 2 onwards only
我有一个 table 总是 returns 多行,我在 VB.NET 中使用这些行作为组合框中的值。在这些行中,第一行是设置为默认值的数据。现在,其余的行必须按字母顺序排列,以便于阅读。我现在正在尝试使用 ROW_NUMBER()
,有没有一种简洁的方法可以让我做到这一点。
以此结构为基础。
tbl_Sample
col_ID - int
col_description - varchar(30)
存在这些数据
col_ID | col_description
--------------------------
1 | Default_Value
2 | a_value2
3 | a_value2
4 | a_value5
5 | a_value1
6 | a_value3
我想查询 returns 像这样的东西
col_ID | col_description
--------------------------
1 | Default_Value
5 | a_value1
2 | a_value2
3 | a_value2
6 | a_value3
4 | a_value5
至于查询,正如我所说,我正在测试 ROW_NUMBER() 以及 OVER 和 ORDER BY,因为按 col_description
排序将不起作用,因为描述的安排按字母顺序排列将更改必须保留在第 1 行中的 Default_Value
的行号。
row_number() over(order by case when col_description = 'Default_Value' then 0 else 1 end ASC, col_description ASC)
如果你想 GROUP BY 列,使用 PARTITION BY,像这样:
SELECT *, ROW_NUMBER()
OVER(PARTITION BY col_description ORDER BY CASE WHEN col_description = 'Default_Value' THEN 0 ELSE 1 END ASC, col_description ASC) AS RN
FROM tbl_Sample
实际上,我认为没有理由在这里使用 row_number()
。你可以直接在order by
子句中使用case
:
SELECT col_ID, col_description
FROM tbl_Sample
ORDER BY CASE WHEN col_description = 'Default_Value' THEN 0 ELSE 1 END, col_description
我有一个 table 总是 returns 多行,我在 VB.NET 中使用这些行作为组合框中的值。在这些行中,第一行是设置为默认值的数据。现在,其余的行必须按字母顺序排列,以便于阅读。我现在正在尝试使用 ROW_NUMBER()
,有没有一种简洁的方法可以让我做到这一点。
以此结构为基础。
tbl_Sample
col_ID - int
col_description - varchar(30)
存在这些数据
col_ID | col_description
--------------------------
1 | Default_Value
2 | a_value2
3 | a_value2
4 | a_value5
5 | a_value1
6 | a_value3
我想查询 returns 像这样的东西
col_ID | col_description
--------------------------
1 | Default_Value
5 | a_value1
2 | a_value2
3 | a_value2
6 | a_value3
4 | a_value5
至于查询,正如我所说,我正在测试 ROW_NUMBER() 以及 OVER 和 ORDER BY,因为按 col_description
排序将不起作用,因为描述的安排按字母顺序排列将更改必须保留在第 1 行中的 Default_Value
的行号。
row_number() over(order by case when col_description = 'Default_Value' then 0 else 1 end ASC, col_description ASC)
如果你想 GROUP BY 列,使用 PARTITION BY,像这样:
SELECT *, ROW_NUMBER()
OVER(PARTITION BY col_description ORDER BY CASE WHEN col_description = 'Default_Value' THEN 0 ELSE 1 END ASC, col_description ASC) AS RN
FROM tbl_Sample
实际上,我认为没有理由在这里使用 row_number()
。你可以直接在order by
子句中使用case
:
SELECT col_ID, col_description
FROM tbl_Sample
ORDER BY CASE WHEN col_description = 'Default_Value' THEN 0 ELSE 1 END, col_description