0

我有一张桌子

Table1
(
  id bigint
  , name nvarchar(50)
)

该表可以具有相同的名称和不同的案例名称。

Insert into Table1
(Select 1, 'Ram')
(Select 2, 'Ram')
(Select 3, 'Ram')
(Select 4, 'Ram')
(Select 5, 'ra')
(Select 6, 'ram')
(Select 7, 'RAM')
(Select 8, 'RAM')

现在我需要按大小写选择所有不同的名称并具有最小的 ID 号。结果应该是

1, Ram
6, ram
7, RAM
4

3 回答 3

5
SELECT MIN(ID) ID, name COLLATE Latin1_General_CS_AS Name
FROM   table1
WHERE  name <> 'ra'
GROUP  BY name COLLATE Latin1_General_CS_AS
ORDER  BY ID
于 2013-02-20T07:14:01.333 回答
0

你可以使用这个:

SELECT  t.id
        , t.name
FROM    (
        SELECT  ROW_NUMBER() OVER (PARTITION BY name COLLATE Latin1_General_CS_AI ORDER BY id) num
                ,*
        FROM    Table1
) t
WHERE   num = 1 AND name = 'ram'
ORDER BY t.id

请注意,我添加了“COLLATE Latin1_General_CS_AI” - 这告诉 SQL Server 要执行哪种类型的字符串比较,如果您的数据库排序规则区分大小写 (CS),您可以删除这部分查询,但如果您的排序规则不区分大小写 ( CI)您必须使用排序规则的区分大小写版本(我使用Latin1_General区分大小写,不区分重音)。

于 2013-02-20T07:13:22.277 回答
0
select min(id),name  from Table1group by UPPER(name) ASC
于 2013-02-20T07:16:07.270 回答