2016-03-05 24 views
0

我有以下SQL Server查询问题。SQL Server:比较行,当某些值相同时从结果中排除

如果在另一行中有一行其中Issue_DATE =为Maturity_Date,并且两行都具有相同的ID和金额USD,则不应显示这些行。

这里是我的表的简化版本:

ID  ISSUE_DATE     MATURITY_DATE   AMOUNT_USD 
1  2010-01-01 00:00:00.000  2015-12-01 00:00:00.000  5000 
1  2010-01-01 00:00:00.000  2001-09-19 00:00:00.000  700 
2  2014-04-09 00:00:00.000  2019-04-09 00:00:00.000  400 
1  2015-12-01 00:00:00.000  2016-12-31 00:00:00.000  5000 
5  2015-02-24 00:00:00.000  2015-02-24 00:00:00.000  8000 
4  2012-11-29 00:00:00.000  2015-11-29 00:00:00.000  10000 
3  2015-01-21 00:00:00.000  2018-01-21 00:00:00.000  17500 
2  2015-02-02 00:00:00.000  2015-12-05 00:00:00.000  12000 
1  2015-01-12 00:00:00.000  2018-01-12 00:00:00.000  18000 
2  2015-12-05 00:00:00.000  2016-01-10 00:00:00.000  12000 

的结果应该是:

ID  ISSUE_DATE     MATURITY_DATE   AMOUNT_USD 
1  2010-01-01 00:00:00.000  2001-09-19 00:00:00.000  700 
2  2014-04-09 00:00:00.000  2019-04-09 00:00:00.000  400 
5  2015-02-24 00:00:00.000  2015-02-24 00:00:00.000  8000 
4  2012-11-29 00:00:00.000  2015-11-29 00:00:00.000  10000 
3  2015-01-21 00:00:00.000  2018-01-21 00:00:00.000  17500 
1  2015-01-12 00:00:00.000  2018-01-12 00:00:00.000  18000 

我自己尝试过加入,但我没有得到正确的结果。

在此先感谢!

回答

0

你可以尝试这样的事情吗? '不存在'是这样做的方式。

select * from table t1 where not exists (select 'x' from table t2 where t1.issue_date = t2.maturity_date and t1.amount_usd=t2.amount_usd and t1.id = t2.id) 
0

我想使所有的受骗者的子查询,然后从第一台消除它们像这样:

select t1.ID 
, t1.ISSUE_DATE 
, t1.MATURITY_DATE 
, t1.AMOUNT_USD 
FROM 
    t1 
LEFT JOIN 
(select a.ID 
    , a.ISSUE_DATE 
    , a.MATURITY_DATE 
    , a.AMOUNT_USD 
FROM 
    t1 a 
INNER JOIN 
    ti b 
) dupes 
    on 
t1.ID = dupes.ID 
    WHERE dupes.ID IS NULL;