SQL。如何从多列中选择唯一记录

时间:2015-02-25 14:48:49

标签: sql sql-server select unique

我需要选择具有唯一记录的唯一列。就目前而言,在使用简单查询SELECT * FROM table之后,我得到了类似的结果:

| Test1 | Test2 | Test3 | Test1 | Test2 | Test3 | Test1 | Test2 | Test3 | -- column names
|   1   |  1    |   1   |   2   |   2   |   2   |   3   |   3   |   3   | -- records

如果我使用查询:SELECT DISTINCT * FROM table我得到以下结果:

| Test1 | Test2 | Test3 | -- different column names
|   1   |   1   |   1   | -- unique records

应该是这样的:

| Test1 | Test2 | Test3 | -- different column names
|   1   |   2   |   3   | -- different records

你有想法吗?

P.S。记录是动态的


更新

我在使用实际上如此混乱的选择之前转动为列提供不同的名称,也许您有建议如何以其他方式创建不同的名称?

SELECT DISTINCT TOP 5 @colsConversion +=    'CAST([' + Name+ '] AS ' + 'NVARCHAR(MAX)' + ') AS ' + QUOTENAME('Test'+'1')+ ',' + 
                                            'CAST([' + Name+ '] AS ' + 'NVARCHAR(MAX)' + ') AS ' + QUOTENAME('Test'+'2')+ ',' + 
                                            'CAST([' + Name+ '] AS ' + 'NVARCHAR(MAX)' + ') AS ' + QUOTENAME('Test'+'3')+ ',' + 
                                            'CAST([' + Name+ '] AS ' + 'NVARCHAR(MAX)' + ') AS ' + QUOTENAME('Test'+'4')+ ',' + 
                                            'CAST([' + Name+ '] AS ' + 'NVARCHAR(MAX)' + ') AS ' + QUOTENAME('Test'+'5')+ ', '  
                FROM   (SELECT DISTINCT TOP 5....

我只需要使用一次'CAST([' + Name+ '] AS ' + 'NVARCHAR(MAX)' + ') AS ' + QUOTENAME('Test'+'1')+ ',',但问题是我不知道如何为每列创建不同的名称,在这种情况下,所有列都将是名称Test1 < / p>

1 个答案:

答案 0 :(得分:0)

也许这个?

select distinct id, name from [table]

select id, name from [table] group by id, name

这里不同的运算符用于删除重复的结果行。

Distinct是一项相当昂贵的操作,因为在处理完查询后,DB服务器可能会执行排序操作以删除重复项。