簡體   English   中英

從結果集中獲得獨特的價值

[英]Getting distinct values from Resultset

我有下表Employee,記錄如下:

Eid      Ename     Phone
------------------------     
 1         A        043
 1         A        067
 2         B        073
 2         B        072
 3         C        753 
 3         C        464

到目前為止,我得到的是:

SELECT *
FROM   (SELECT Row_number() OVER (ORDER BY Eid ASC) AS rownum,
               Eid,
               Ename,
               Phone
        FROM   Employee
        WHERE  Eid IN(SELECT DISTINCT(Eid)
                      FROM   Employee
                      GROUP  BY Eid)) AS RESULTSET
WHERE  rownum BETWEEN 0 AND 3

實際上,內部查詢返回的是distinct結果,但是當我在最終的RESULTSET獲取結果時,該內部查詢沒有反映出來。

請告知如何獲取獨特的RESULTSET。 我的輸出應返回如下:

Eid      Ename     Phone
------------------------     
 1         A         043
 2         B         073
 3         C         753

如果使用QUALIFY子句,則可以指定希望返回的Row_Number值范圍。 QUALIFY子句用於窗口聚合函數,而HAVING子句用於非窗口聚合函數。

SELECT DISTINCT
       e1.eid
     , e1.ename
     , e1.ephone
--     , ROW_NUMBER() OVER(PARTITION BY e1.eid ORDER BY e1.eid) AS RowNum_
FROM emp e1
QUALIFY ROW_NUMBER() OVER(PARTITION BY e1.eid ORDER BY e1.eid) = 1

如果在結果集中包含RowNum_ ,則可以在QUALIFY引用它,而不是在ROW_NUMBER()窗口聚合中再次引用它。

您的查詢要復雜得多。 嘗試使用CROSS APPLY簡化它

SELECT DISTINCT a.Eid, a.Ename, c.Phone
FROM   EMPLOYEE a
CROSS APPLY
(
  SELECT  TOP 1 ROW_NUMBER() OVER (PARTITION by Ename ORDER BY Eid ASC) AS RowNo,
          b.Eid, b.Phone
  FROM    EMPLOYEE b
  WHERE   a.EID = b.eid 
  ORDER BY RowNo ASC                         -- you can change this to DESC also
) c

我添加DISTINCT的原因是因為您正在將表與其自身連接。

另一個更簡單的版本

SELECT DISTINCT a.Eid, a.Ename, c.Phone
FROM   EMPLOYEE a
CROSS APPLY
(
  SELECT  TOP 1 b.Eid, b.Phone
  FROM    EMPLOYEE b
  WHERE   a.EID = b.eid 
) c

SQLFiddle演示

Ahhm Im不確定您要如何執行此查詢,但我以某種方式將其基於您的預期輸出

碼:

select    Eid,Ename,Phone 
from      (select ROW_NUMBER() OVER (ORDER BY Eid ASC) AS rownum,
                  Eid,
                  Ename,
                  Phone 
           from Employee 
           where Eid in (select distinct(Eid) 
                         from Employee  )
         ) AS RESULTSET
Where rownum %2<>0

SQLFiddle演示

嘗試這個

 SELECT * 
FROM   (SELECT Row_number() OVER (partition by ename ORDER BY Eid ASC) AS rownum, 
               Eid, 
               Ename, 
               Phone 
        FROM   Employeee
        WHERE  Eid IN(SELECT DISTINCT(Eid) 
                      FROM   Employeee
                      GROUP  BY Eid)) AS RESULTSET 
WHERE  rownum =1

嘗試這個:

 select Eid,Ename,Phone from 
 (select *,ROW_NUMBER() over(partition by Ename order by eid) as rn from emp) a
 where rn=1

暫無
暫無

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

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