我想计算一列的总和,但日期不同。 因此,如果今天是日期,则应计算今天金额的总和。我已经做到了。
问题是,如果只有该行的日期与其他referencedate列匹配,则“今天”列将显示数据。 我想查看所有列中的“今日列”数据,而不考虑任何日期或具有任何referencedate列的行。 例 这就是我得到的:
ReferenceDate Item Amount Today Yesterday Accordingtodate
03/29/2019 1 100 100 0 100
03/28/2019 1 80 0 80 80
03/27/2019 1 50 0 0 50
我在查询中放入了这样的案例:
IsNull(Case When ReferenceDate = '03/29/2019' Then Sum(Fact_dayclosingsales.Qty) End,0) As Today, \\ For Today
IsNull(Case When ReferenceDate = '03/28/2019' Then Sum(Fact_dayclosingsales.Qty) End,0) As Yesterday, \\For Yesterday
这就是我想要的:
Date Item Amount Today Yesterday Accordingtodate
03/29/2019 1 100 100 80 100
03/28/2019 1 80 100 80 80
03/27/2019 1 50 100 80 50
今天和昨天应该在每行中显示相同的数据,而不管上表中的日期如何。
该数据库是在2002年使用SQL SERVER 2000创建的,我正在使用SQL SERVER 2017对其进行管理。某些功能和查询将不起作用。
我的主要任务是仅根据表中的列名称显示销售额和金额。像今天,昨天,LastMonthSameDate等。上面给出的表格只是我想要做的一个例子。
答案 0 :(得分:1)
我们可以尝试使用MAX
作为分析函数进行旋转:
SELECT
Date,
Amount,
MAX(CASE WHEN ReferenceDate = '03/29/2019'
THEN Qty END) OVER () AS Today,
MAX(CASE WHEN ReferenceDate = '03/23/2019'
THEN Qty END) OVER () AS Yesterday,
Accordingtodate
FROM Fact_dayclosingsales
ORDER BY
Date;
如果您使用的是SQL Server的较旧版本,但不支持分析功能,则可以尝试使用子查询:
SELECT
Date,
Amount,
(SELECT Qty FROM Fact_dayclosingsales
WHERE ReferenceDate = '03/29/2019') AS Today,
(SELECT Qty FROM Fact_dayclosingsales
WHERE ReferenceDate = '03/28/2019') AS Yesterday,
Accordingtodate
FROM Fact_dayclosingsales
ORDER BY
Date;