2017-06-12 88 views
1

我正在獲取重複的數據行。重複以及如何擺脫它們

wh.whsheaderID是不同的,它對應於一個特定的單位和特定的引用(因此我的「重複值」)。然後我有一個不離開的日期時間,然後是一個不同的離開時間。

但是,因爲有2個不同的wh.whsheaderIDs對應同一個單元,並且同一個參考文件我得到了2行數據,其中NOT出發日期&掃描日期將被填充,並且在下一行中,THU出發日期&掃描時間將被填充。我如何將這些信息整理成一行?

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 */