2010-01-14 79 views
0

您好,我有如下表在表格中選擇一個不同的列,而其他人保持原樣

 
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 

快速的解決方案理解

+0

所以你想爲每個不同的LName隨機行? – MartW 2010-01-14 09:42:36

回答

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 
+0

抱歉,但查詢不起作用,他們正在返回整個表 – vasu 2010-01-14 09:56:47

+0

抱歉,修正了這個問題。 – 2010-01-14 11:00:30

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且不同的Last_Name,它將返回2行。我正在檢查。

另一種方法是使用標識列創建臨時表。然後,在內部查詢中使用min(First_Name),而不是在P_ID中使用min(Idenity)組,並且在join中我們將使用P_ID和identity作爲join。

+0

我正在使用MS SQL版本8.0你的查詢拋出一個錯誤--- 「錯誤的語法附近'('」 – vasu 2010-01-14 09:58:26

+0

編輯的代碼上面的SQL 2000 – 2010-01-14 11:53:09

相關問題