2016-09-19 71 views
0

我有一個包含重複行的表,但是某些重複行具有的列不包含同一列的數據。我怎樣才能刪除/只忽略那些列空白的行?在某些情況下:如何忽略列中不包含數據的重複行

Name  Employee# Location City 
----------------------------------------- 
BowerT  48999  NJ Foods 
BowerT  48999  NJ Foods Pearl 
BowerT  48999  NJ Foods Johns 
BowerT  48999  NJ Foods Johns 

我使用的是CTE刪除重複,但是,如果第二,第三或第四行有我需要該列的數據,我失去了它,因爲它們比列1時。

;With hrEmployee as 
(
    Select 
     *, 
     Row_Number() Over (Partition BY Employee_Number order by Employee_Number) As RowNumber 
    From 
     [dbo].[hrEmployee] 
    Where 
     Employee_Number = '48999'  
) 
Delete hrEmployees 
where RowNumber > 1 

我在想什麼?

+0

你確定你可以在MySQL中使用'WITH'嗎? – Mojtaba

+0

爲什麼不使用** where **條件檢查空白的特定列? – blackpen

+0

[mysql]標記在這裏不正確。這看起來像sql-server。 –

回答

0

這裏是整個例子的相關代碼的變化是:

ROW_NUMBER() OVER (PARTITION BY Employee_Number ORDER BY 
      CASE WHEN ISNULL(City,'') = '' THEN 1 ELSE 0 END 
     ) as RowNumber 

什麼,做僅僅是爲了你的,你要保留,說什麼如果紐約市爲空或「」的結果(空白)使它最後。您可以通過在您的ORDER BY中指定不同順序來排序您的結果。

DECLARE @Table AS TABLE (Name VARCHAR(10), Employee_Number INT, Location VARCHAR(20), City VARCHAR(20)) 
INSERT INTO @Table VALUES ('BowerT',48999,'NJ Foods',NULL) 
,('BowerT',48999,'NJ Foods','Pearl') 
,('BowerT',48999,'NJ Foods','Johns') 
,('BowerT',48999,'NJ Foods','Johns') 

SELECT * 
FROM 
    @Table 

;WITH hrEmployee AS (
     SELECT 
      * 
      ,ROW_NUMBER() OVER (PARTITION BY Employee_Number ORDER BY 
       CASE WHEN ISNULL(City,'') = '' THEN 1 ELSE 0 END 
      ) as RowNumber 
     FROM 
      @Table 
     where Employee_Number = '48999' 
) 

DELETE 
FROM 
    hrEmployee 
WHERE 
    RowNumber > 1 

SELECT * 
FROM 
    @Table 
+1

謝謝,是的,這是完美的。這正是我需要的。非常感謝你!!! – user1964673