在SQL Server中,要选择每个id组的前2位,可以使用SUBSTRING
和ROW_NUMBER()
窗口函数。假设您有一个名为myTable
的表,其中包含一个名为id
的列,您可以使用以下查询:
WITH RankedItems AS (
SELECT
id,
SUBSTRING(id, 1, 2) AS id_prefix,
ROW_NUMBER() OVER (PARTITION BY SUBSTRING(id, 1, 2) ORDER BY id) AS row_num
FROM
myTable
)
SELECT
id,
id_prefix
FROM
RankedItems
WHERE
row_num <= 2
ORDER BY
id_prefix,
id;
这个查询首先使用WITH
子句创建一个名为RankedItems
的临时结果集,其中包含原始表中的id
列、id
列的前2位(使用SUBSTRING
函数获取)以及一个名为row_num
的窗口函数,该函数按照id
列的前2位对数据进行分区,并按照id
列对数据进行排序。
然后,在主查询中,我们从RankedItems
中选择id
和id_prefix
列,并仅选择row_num
小于等于2的行,以获取每个id
组的前2位。最后,我们按照id_prefix
和id
对结果进行排序。