从sql查询中删除重复

时间:2017-03-08 11:13:21

标签: sql-server

尝试从状态为100的每个商店中选择总交货,有些情况下一个修理编号为2 100(状态交付)。我怎样才能删除所有重复的选择,甚至不需要一个手段,如果它的重复应该从计数取消修复。请仔细检查我的代码,这是我现在所能达到的目标。

SELECT        UL.StoreName, COUNT(DISTINCT JT.REPAIRNO) AS TotalDelivery
FROM            DataDetails AS UL LEFT OUTER JOIN
                          JOBTRACKING AS JT ON UL.storeID = JT.store_code
WHERE        (CAST(JT.created_Date AS date)='2017-03-08')

             AND JT.JOBSTATUS=100
GROUP BY UL.StoreName

例如

Name    TotalDelivery
ABC 4
XYZ 4

这一个来自

RepairNo    Store   Status  CreatedDate
1000    ABC 100 3/8/2017
1001    ABC 100 3/8/2017
1001    ABC 100 3/8/2017
1008    ABC 100 3/8/2017
1009    ABC 100 3/8/2017
1011    XYZ 100 3/8/2017
1011    XYZ 100 3/8/2017
1013    XYZ 100 3/8/2017
1014    XYZ 100 3/8/2017
1015    XYZ 100 3/8/2017
1015    XYZ 100 3/8/2017

需要如下结果

Name    TotalDelivery
ABC 3
XYZ 2

它将返回所有行并删除重复但它将从重复返回一个,我也想删除那个。只有那一行没有任何重复。提前致谢。

2 个答案:

答案 0 :(得分:1)

如果您需要非重复结果,则需要使用"/users/:username" 子句将其过滤掉。请尝试以下查询。

  

更新

router.get("/users/:id",  async ctx => {
    //ctx.request.id
    if (!isNaN(ctx.request.id)) // it IS a number {
        //do something with user ID
    } else {
        //do something with username
    }
});
  

测试脚本

SUB QUERY
  

结果

SELECT UL.StoreName, COUNT(1) AS TotalDelivery
FROM DataDetails AS UL 
LEFT OUTER JOIN JOBTRACKING AS JT 
ON UL.storeID = JT.store_code
WHERE CAST(JT.created_Date AS date)='2017-03-08'
AND JT.JOBSTATUS=100
AND JT.REPAIRNO IN (SELECT REPAIRNO from JOBTRACKING j WHERE j.store_code = UL.storeID GROUP BY j.REPAIRNO HAVING COUNT(1) = 1)
GROUP BY UL.StoreName, UL.storeID

答案 1 :(得分:-1)

我需要更多详细信息,但据我了解,首先应准备总选择数据列表结果。例如,在内部选择中,您可以对数据进行分组并删除所有并发或冗余数据,或者您可以应用where条件然后使用外部选择和GROUP BY UL.StoreName分组,然后您将获得真正的答案。不要使用明显的!