[英]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
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
嘗試這個
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.