如何比较 SQL 服务器中的两个日期值?
How to compare two date values in SQL Server?
我有一个 table,日期是 2018 年和 2019 年,这是我的数据。
select amount, date
from TABLE1
where date in (2018, 2019) and empid = 21120
它对我不起作用,因为查询说日期 = 2019 时的情况然后金额为我上面的数据当日期 = 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。
您似乎在寻找条件聚合:
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)
你可以这样做
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
我有一个 table,日期是 2018 年和 2019 年,这是我的数据。
select amount, date
from TABLE1
where date in (2018, 2019) and empid = 21120
它对我不起作用,因为查询说日期 = 2019 时的情况然后金额为我上面的数据当日期 = 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。
您似乎在寻找条件聚合:
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)
你可以这样做
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