我有一张桌子
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
答案 0 :(得分: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
答案 1 :(得分: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
区分大小写,不区分重音)。
答案 2 :(得分:0)
select min(id),name from Table1group by UPPER(name) ASC