簡體   English   中英

使用子查詢獲取過濾結果

[英]Getting filtered results with subquery

我有一張桌子,上面的東西如下:

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,然后使用“外部申請”從同一表格中選擇前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

有人可以建議我如何改善它嗎?

謝謝

嘗試:

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

如果您使用的是SQL Server 2005或更高版本,則可以使用“排名”功能,只需獲取列表中的第一個即可。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM