在SQL中查找具有不同年份的重复值

时间:2018-02-28 01:56:38

标签: sql microsoft-query

如何在表格中搜索重复记录但具有不同年份。

我的示例数据:

Cus_No  Item_No Ord_Dt  Orders 
1       A       2016    1
1       A       2017    2
1       B       2016    1
2       B       2015    1
2       B       2018    1
输出需要
Cus_No  Item_No Ord_Dt  Orders 
1       A       2016    1 
1       A       2017    2
2       B       2015    1
2       B       2018    1 
我正在尝试使用相同的Cus_No收集所有记录,相同的Item_No在Orders中具有任何值并且在Ord_dt中的任何一年中都存在。原因是,我需要找到具有相同客户编号的项目,这些项目具有来自所有年份的订单。 我正在使用MS Query,这是我尝试的SQL语句,但仍显示所有记录。

SELECT `'table'`.Cus_No, `'table'`.Item_No, `'table'`.Ord_Dt, `'table'`.Orders
FROM `'table'`
WHERE (`'table'`.Orders>=1) AND (`'table'`.Ord_Dt In ('2016','2017'))

3 个答案:

答案 0 :(得分:0)

以下查询返回重复项 -

select * from test where (cus_no, item_no) in (
select Cus_No, item_no from test group by Cus_No, item_no having count(*) > 1)

答案 1 :(得分:0)

在黑暗中刺伤:

with agg as (
    select cust_no, item_no from T
    group by cust_no, item_no
    where ord_dt in (...)
    having count(*) = <num years in list>
)    
select *
from T t inner join agg a
    on  a.cust_no = t.cust_no
        and a.item_no = t.item_no;

答案 2 :(得分:0)

假设您要识别与超过一年的客户项目相对应的记录,我们可以尝试以下方法:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT Cus_No, Item_No
    FROM yourTable
    GROUP BY Cus_No, Item_No
    HAVING COUNT(DISTINCT Ord_Dt) > 1
) t2
    ON t1.Cus_No  = t2.Cus_No AND
       t1.Item_No = t2.Item_No
相关问题