#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. Пожалуйста, отредактируйте свой вопрос и покажите чистый ввод и вывод, и убедитесь , что имена столбцов соответствуют вашему запросу.