分组后是否可以查看不同行的同一列中的同一列结果?

时间:2019-03-29 07:41:07

标签: sql sql-server tsql

我想计算一列的总和,但日期不同。 因此,如果今天是日期,则应计算今天金额的总和。我已经做到了。

问题是,如果只有该行的日期与其他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等。上面给出的表格只是我想要做的一个例子。

1 个答案:

答案 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;