【发布时间】:2020-09-21 19:03:30
【问题描述】:
我使用的是 SQL Server 2018,我有一个名为 SALES 的表,看起来像这样
SALES_PERSON_ID MONTH SALES
001 Aug-20 3
002 Aug-20 2
003 Aug-20 0
001 Sep-20 4
002 Sep-20 2
003 Sep-20 3
每个新月都会添加到表格中,显示每个销售人员的累计销售额。
我想将此数据总结为本月与上个月的销售额,我是这样做的:
SELECT
tb1.SALES_PERSON_ID
,SALES_THIS_MONTH
,SALES_LAST_MONTH
FROM
(SELECT SALES_PERSON_ID, MONTH, SUM(SALES) AS SALES_THIS_MONTH
FROM SALES
WHERE MONTH = 'Sep-20') AS tb1
JOIN
(SELECT SALES_PERSON_ID, MONTH, SUM(SALES) AS SALES_LAST_MONTH
FROM SALES
WHERE MONTH = 'Aug-20') AS tb2
ON. tb1.SALES_PERSON_ID = tb2.SALES_PERSON_ID
如果 9 月 20 日是当前月份,那么它会给我这样的信息:
SALES_PERSON_ID SALES_THIS_MONTH SALES_LAST_MONTH
001 4 3
002 2 2
003 3 0
这很好用,但实际上我有数百个月的数十万条记录,我无法在 WHERE 子句中“硬编码”所有可能月份的日期。我想要一个动态解决方案,该解决方案将始终提供给定月份的销售额总和,以及特定于该记录的上个月的销售额总和。
所以我需要我的 tb2 以某种方式始终知道 tb1 指的是哪个月份,然后减去一个月。任何帮助将不胜感激!
【问题讨论】:
-
您在子查询中缺少
GROUP BY? -
Y2K 20 年后,但我们继续避免吸取教训。好难过!
-
没有 SQL Server 2018 版本 - 我们有 2012、2014、2016、2017 和 2019 - 任君选择
标签: sql sql-server tsql