【问题标题】:How to compare two date values in SQL Server?如何比较 SQL Server 中的两个日期值?
【发布时间】:2020-07-01 19:30:25
【问题描述】:

我有一个日期为 2018 年和 2019 年的表格,这是我的数据。

select amount, date 
from TABLE1 
where date in (2018, 2019) and empid = 21120

它对我不起作用,因为查询显示 date = 2019 时的情况,然后在 date = 2019 时将金额作为我上面的数据,它只会显示金额。这是我的结果:

Amount     Data         
9.67       2019     
21         2019         
6          2019        
9.56       2018     
42         2018         
7          2018         

需要什么:2018 年和 2019 年两个日期的金额之间的差异。

上面的查询只给了我这些日期的一行金额。

我的预期结果是找到 2018 年和 2019 年之间的金额差异。关于如何获得差异的任何想法。我正在尝试自行加入,但我们不胜感激。

例如:2019 年金额 9.67 - 2018 年金额 9.56。

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅“如何提问”页面以获得澄清此问题的帮助。
  • 显而易见,2019 年不是一个日期。这是一年。如果您的目标是逐一比较您显示的行,那么您将需要一组列来确定每年的顺序,以便您的比较成功。如果我不得不猜测,似乎没有这样的列,你的问题是基于你所包含的行的物理排列。不幸的是,根据定义,表中的行是无序的。这使你的目标变得不可能。

标签: sql sql-server tsql sql-server-2005 ssms


【解决方案1】:

您似乎正在寻找条件聚合:

select
    sum(case when date = 2019 then amount else 0 end)
    - sum(case when date = 2018 then amount else 0 end) diff
from mytable
where empid = 21 and date in (2018, 2019)

查询为您提供给定员工 2019 年和 2018 年总金额之间的差额。

这可以缩短一点:

select sum(case when date = 2019 then amount else -amount end) diff
from mytable
where empid = 21 and date in (2018, 2019)

【讨论】:

    【解决方案2】:

    你可以这样做

    SELECT ABS(SUM(CASE WHEN Data = '2019' THEN Amount ELSE -Amount END)) Diff
    FROM
    (
      VALUES
      (9.67       , '2019'),     
      (21         , '2019'),         
      (6          , '2019'),        
      (9.56       , '2018'),     
      (42         , '2018'),         
      (7          , '2018') 
    ) T(Amount, Data)
    WHERE Data IN ('2018', '2019')
          -- AND empid = 21120; Uncomment this when you run it against your table
    

    【讨论】:

      猜你喜欢
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多