使用子查询获取筛选结果

时间:2010-06-15 18:55:26

标签: sql-server tsql

我有一张表格如下:

ID Name Color  
------------
1 Bob Blue  
2 John Yellow  
1 Bob Green  
3 Sara Red  
3 Sara Green

我想要做的是返回一个过滤的结果列表,从而返回以下数据:

ID Name Color  
------------
1 Bob Blue  
2 John Yellow  
3 Sara Red  

即。我想每个用户返回1行。 (我不介意为特定用户返回哪一行 - 我只需要[ID]是唯一的。)我已经有了一些有用的东西,但我真的很慢,我创建了一个临时表,添加了所有的ID,然后使用了“OUTER APPLY”选择同一表中的前1位,即

CREATE TABLE #tb  
(  
    [ID] [int]  
)  

INSERT INTO #tb  
select distinct [ID] from MyTable

select 
    T1.[ID],
    T2.[Name],
    T2.Color  
from  
    #tb T1
    OUTER APPLY 
    (
        SELECT TOP 1 * FROM MyTable T2 WHERE T2.[ID] = T1.[ID]
    ) AS V2


DROP TABLE #tb

有人可以建议我如何改进吗?

由于

2 个答案:

答案 0 :(得分:1)

尝试:

WITH CTE AS 
(
SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS 'RowNo', 
ID, Name, Color
FROM table
)
SELECT ID,Name,color
FROM CTE
WHERE RowNo = 1

select 
  *
from
(
    Select 
      ID, Name, Color,
      rank() over (partition by Id order by sum(Name) desc) as Rank
    from 
      table
    group by 
      ID
) 
  HRRanks
where
  rank = 1

答案 1 :(得分:0)

如果您使用的是SQL Server 2005或更高版本,则可以使用排名功能,只需抓住列表中的第一个。

http://msdn.microsoft.com/en-us/library/ms189798.aspx