2012-10-31 16 views
-2

我的SQL表是这样的:查找排

id, name, value1, value2, value3, value4 
1, xyz, 1, 2, 4, 1 
2, xyz, 4, 2, 4, 1 
3, abc, 4, 2, 4, 1 
4, abc, 4, 2, 2, 1 
5, abc, 4, 2, 2, 1 

我想要写一个函数返回一个拥有他们的价值观的任何行(SQL查询阅读:值1,值2,值3,值4)已更改。所以输出的结果将是:

id, name, value1, value2, value3, value4 
1, xyz, 1, 2, 4, 1 
2, xyz, 4, 2, 4, 1 
4, abc, 4, 2, 2, 1 

我明白,如果我只需要在输出值我可以用不同的或集团通过这样的:

select distinct value1,value2,value3,value4 from table; 

但是,在这里我需要标识和名称的列输出也是如此。

想知道是否真的需要编写子查询或创建虚拟/内部表来获得我的结果。或者,有一个更聪明的方法?

我的问题与How to find out whether a table has some unique columns不相似。让我知道,如果你认为否则,我可以澄清。

+0

什么是 “改” 对你意味着什么? –

+1

意思是不同的 – Watt

+0

有什么不同? –

回答

3

试试这个

SQL FIDDLE EXAMPLE

select * 
from table 
where id in (select min(id) from temp group by value1,value2,value3,value4) 
+0

感谢您的回答! 这是我所需要的,简短而简单。 – Watt

2

嗯,你更新的问题,我相信你能做到这一点是这样的:

;WITH CTE AS 
(
    SELECT *, 
      RN = ROW_NUMBER() OVER(PARTITION BY value1, value2, value3, value4 ORDER BY ID) 
    FROM YourTable 
) 
SELECT id, name, value1, value2, value3, value4 
FROM CTE 
WHERE RN = 1; 
+0

感谢您的回答! – Watt