2017-06-12 87 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 */ 
相关问题