选择表中的单个不同列,而其他列保持不变

时间:2010-01-14 09:30:53

标签: sql-server sql-server-2000

嗨,我有下表

P_id    Fname         Lname

1   vaibhav      shukla
2   davalesh      barak
2   sumo          barath
3   kushal        mehra

现在我想要一个返回以下任何一个表的查询

P_id     Fname       Lname

1   vaibhav      shukla
2   davalesh      barak
3   kushal        mehra

OR

P_id     Fname       Lname

1   vaibhav      shukla
2   sumo          barath
3   kushal        mehra

快速解决方案赞赏

2 个答案:

答案 0 :(得分:2)

好像你想在一列上获得独特。

希望您使用SQL Server 2005或更高版本

Select First_Name,Last_Name,P_Id
FROM
(
Select First_Name,Last_Name,P_Id

Row_Number() Over (Partition By P_Id Order By First_Name) As RNum

From Table1) T1
WHERE T1.RNum = 1

想法是在组PID中分配不同的行号,然后获得RowNumber = 1

的行号

对于SQl Server 2000

Select Distinct First_Name,Last_Name,P_ID
From Table1 T1
INNER JOIN 
(
   Select Min(First_Name) First_Name,P_ID

   From Table1 T1
   Group By P_ID
) T2 ON T1.P_ID = T2.P_ID AND T1.First_Name = T2.First_Name

注意:如果两行具有相同的P_ID,First_Name和Different Last_Name,则返回2行。我正在检查。

另一种方法是使用Identity Column创建临时表。然后在内部查询中使用min(First_Name)而不是在P_ID中使用min(Idenity)组,在连接中我们将使用P_ID和标识进行连接。

答案 1 :(得分:0)

select     t1.p_id
,          min(t2.lname) lname
,          min(t2.fname) fname
from       tab t1
inner join tab t2
on         t1.p_id = t2.p_id
where      t2.Lname = (
               select min(lname)
               from   tab t2
               where  t2.p_id = t1.p_id 
           )
group by   t1.p_id