选择不同的记录order by子句

时间:2013-02-20 07:08:03

标签: sql sql-server

我有一张桌子

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

3 个答案:

答案 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