2017-06-12 12 views
1

重複するデータ行を取得しています。重複してそれらを取り除く方法

wh.headerIDは異なります。これは特定のユニットと特定のリファレンス(したがって、私の "重複値")に対応しています。それから、私は出発のための日時と、出発のための異なる日時を持っています。

しかし、同一のユニットと同じ参照に対応する2つの異なるwh.headerIDがあるため、NOT出発日&スキャン日が入力され、次の行に2行のデータが得られ、THU出発日&スキャン時間が入力されます。この情報を1行にどのように照合するのですか?条件付きの集約使用

SELECT wh.WhsHeaderID, 
     mu.Number AS Unit , 
     m.MovementRef AS Reference , 
     (SELECT CASE WHEN COUNT(*) >=2 THEN 'Yes' ELSE 'No' END FROM dbo.whsHeader WHERE RunMovID = m.movementId) AS [Co-Load], 
     (Select wh.ArrDepDate where wh.localdepotcode = 'NOT') AS [NOT Departure Date], 
     (Select wh.LastScannedTime where wh.LocalDepotCode = 'NOT') AS [NOT Last Scan] , 
     (Select wh.ArrDepDate where wh.LocalDepotCode = 'THU') as [THU Departure Date], 
     (Select wh.LastScannedTime where wh.LocalDepotCode = 'THU') as [THU Last Scan], 
+1

あなたは[ソリューション](https://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rowsを探していましたか? rq = 1)?同様の質問が何度も何度も尋ねられています。 – HoneyBadger

+3

'from'を持たないサブクエリがあります。 – SqlZim

+0

2つの 'wh.whsheaderID'がある場合は、どちらを保留しますか?たとえば、大きなもの? (ヒント:「MAX」を使用してください)。あなたが投稿したSQLは有効ではありません。すべて –

答えて

1

select 
    WhsHeaderId = min(wh.WhsHeaderID) 
    , Unit = mu.Number 
    , Reference = m.MovementRef 
    , [Co-Load] = case when count(*) >=2 then 'Yes' else 'No' end 
    , [NOT Departure Date] = min(case when wh.localdepotcode = 'NOT' then wh.ArrDepDate end) 
    , [NOT Last Scan]  = max(case when wh.localdepotcode = 'NOT' then wh.LastScannedTime end) 
    , [THU Departure Date] = min(case when wh.localdepotcode = 'THU' then wh.ArrDepDate end) 
    , [THU Last Scan]  = max(case when wh.localdepotcode = 'THU' then wh.LastScannedTime end) 
    /* , other columns */ 
from ... 
    inner join dbo.whsHeader wh 
    on wh.RunMovID = m.movementId 
group by 
    mu.Number 
    , m.MovementRef 
    /* , other non aggregated columns */ 
関連する問題