Есть ли способ просмотреть один и тот же результат столбца в одном и том же столбце из разных строк после выполнения Group by?

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

Я хочу вычислить сумму одного столбца, но с разными датами. Итак, если это сегодняшняя дата, она должна вычислить сумму сегодняшней суммы. Я сделал это.

Проблема в том, что столбец Today показывает данные, если только в строке дата совпадает с другим столбцом referencedate. Я хочу просмотреть данные столбца 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 для управления ею. Некоторые функции и запросы не будут работать.

Моя основная задача — просто показать продажи и сумму в соответствии с именем столбца в таблице. Например, сегодня, вчера, в прошлом месяце и многие другие. Приведенные выше таблицы являются лишь примером того, что я хочу сделать.

Ответ №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;
  

Комментарии:

1. Я пытался использовать Over (), но он выдает ошибку «Неправильный синтаксис рядом с ключевым словом «OVER». ‘. Я думаю, это потому, что я использую sql server 2000 (база таблиц) и в настоящее время я использую Sql server 2017. Over не поддерживается в sql server 2000.

2. Пожалуйста, отредактируйте свой вопрос и покажите чистый ввод и вывод, и убедитесь , что имена столбцов соответствуют вашему запросу.