【问题标题】:SQL Server : compare rows, exclude from results when some values are the sameSQL Server:比较行,当某些值相同时从结果中排除
【发布时间】:2016-03-05 02:03:25
【问题描述】:

我有以下 SQL Server 查询问题。

如果在另一行中存在 Issue_DATE = as Maturity_Date 的行,并且如果两行具有相同的 ID 和 Amount 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

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

提前致谢!

【问题讨论】:

    标签: sql compare rows


    【解决方案1】:

    你能试试这样的吗? “不存在”是这样做的方式。

    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)
    

    【讨论】:

      【解决方案2】:

      我会考虑对所有骗子进行子查询,然后像这样从第一个表中删除它们:

      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-05
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        相关资源
        最近更新 更多