Sql 在执行Group by之后,是否有办法在不同行的同一列中查看相同列的结果?

Sql 在执行Group by之后,是否有办法在不同行的同一列中查看相同列的结果?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想计算一列的总和,但日期不同。 因此,如果是今天,它应该计算今天的金额总和。我已经这样做了 如果只有行的日期与其他referencedate列匹配,则issue is Today列将显示数据。 我想查看所有列中的Today列数据,而不考虑任何日期或具有任何referencedate列的行。 例子 这就是我得到的: ReferenceDate Item Amount Today Yesterday Accordingtodate 03/29/2019 1 100

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

如果只有行的日期与其他referencedate列匹配,则issue is Today列将显示数据。 我想查看所有列中的Today列数据,而不考虑任何日期或具有任何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对其进行管理。某些函数和查询将不起作用


我的主要任务是根据表中的列名显示销售额和金额。像今天、昨天、上个月的生日等等。以上给出的表格只是我想做的一个例子。

我们可以尝试使用
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;

我尝试使用Over(),但它给出了一个错误“关键字“Over”附近的语法不正确”。我想这是因为我使用的是sql server 2000(表库),而我目前使用的是sql server 2017。sql server 2000不支持Over。请编辑您的问题并显示干净的输入和输出,并确保列名与您的查询匹配。