2016-04-21 75 views
0

我想查找Dat1字段中的所有唯一記錄,但我希望返回每一個Null記錄。哪個重複記錄被丟棄並不重要。根據一個字段查找不重複的記錄,不包括空值。

示例表:

+----+--------------+ 
| ID |  Dat1  | 
+----+--------------+ 
| 1 | [email protected] | 
| 2 | [email protected] | 
| 3 | NULL   | 
| 4 | NULL   | 
| 5 | [email protected] | 
| 6 | [email protected] | 
+----+--------------+ 

所需的結果:

+----+--------------+ 
| ID |  Dat1  | 
+----+--------------+ 
| 1 | [email protected] | 
| 3 | NULL   | 
| 4 | NULL   | 
| 5 | [email protected] | 
+----+--------------+ 

這可能嗎?我嘗試了幾個子查詢的方法,但無法完全實現。

回答

0
select min(id), dat1 from table where dat1 is not null group by dat1 
union 
select id  , dat from table where dat1 is null 
0

您可以使用ROW_NUMBER以消除重複的非空Dat1秒,然後用UNION ALL添加NULL值:

WITH tbl(Id, Dat1) AS(
    SELECT 1, '[email protected]' UNION ALL 
    SELECT 2, '[email protected]' UNION ALL 
    SELECT 3, NULL UNION ALL 
    SELECT 4, NULL UNION ALL 
    SELECT 5, '[email protected]' UNION ALL 
    SELECT 6, '[email protected]' 
) 
SELECT 
    Id, Dat1 
FROM (
    SELECT *, 
     rn = ROW_NUMBER() OVER(PARTITION BY Dat1 ORDER BY Id) 
    FROM tbl 
    WHERE Dat1 IS NOT NULL 
)t 
WHERE rn = 1 

UNION ALL 

SELECT * FROM tbl WHERE Dat1 IS NULL 
相關問題