Запрос для представления общей стоимости на значимые даты - PullRequest
0 голосов
/ 16 февраля 2011

Учитывая таблицу со стоимостью отдельных предметов в инвентаре на определенные даты, как я могу вернуть сводные данные, которые отражают общую стоимость на каждую уникальную дату?

Например, с учетом следующей структуры:

DECLARE @INVENTORY TABLE(
  EFFECTIVE_DATE DATE NOT NULL,
  ITEM INT NOT NULL,
  VALUE DECIMAL(6,2) NOT NULL
)
INSERT @INVENTORY VALUES ('2011-01-01', 1, 40.01)
INSERT @INVENTORY VALUES ('2011-01-01', 2, 35.01)
INSERT @INVENTORY VALUES ('2011-01-01', 3, 17.01)
INSERT @INVENTORY VALUES ('2011-02-01', 2, 50.01)
INSERT @INVENTORY VALUES ('2011-02-01', 3, 45.01)
INSERT @INVENTORY VALUES ('2011-03-01', 1, 10.01)
INSERT @INVENTORY VALUES ('2011-03-01', 4, 5.01)

Какой запрос можно использовать для получения следующего?

EFFECTIVE_DATE  TOTAL_VALUE
2011-01-01      92.03
2011-02-01      135.03
2011-03-01      110.04

Проблема заключается в том, что стоимость запасов будет по-прежнему учитываться в последующих датах. Обратите внимание, что 2011-03-01 представляет сумму самого последнего значения для всех четырех различных элементов, хотя только у двух из них есть запись на этот день.

Ответы [ 3 ]

2 голосов
/ 16 февраля 2011

Это показывает значение для элементов в каждой дате:

SELECT 
   D.EFFECTIVE_DATE, 
   I.ITEM, 
   COALESCE((SELECT TOP 1 VALUE FROM @INVENTORY II WHERE (II.ITEM = I.ITEM) AND (II.EFFECTIVE_DATE <= D.EFFECTIVE_DATE) ORDER BY EFFECTIVE_DATE DESC),0) VALUE
FROM (SELECT DISTINCT EFFECTIVE_DATE FROM @INVENTORY) D
CROSS JOIN (SELECT DISTINCT ITEM FROM @INVENTORY) I

Это показывает сводку:

SELECT 
  EFFECTIVE_DATE,
  SUM(VALUE)
FROM
(
    SELECT 
       D.EFFECTIVE_DATE, 
       I.ITEM, 
       COALESCE((SELECT TOP 1 VALUE FROM @INVENTORY II WHERE (II.ITEM = I.ITEM) AND (II.EFFECTIVE_DATE <= D.EFFECTIVE_DATE) ORDER BY EFFECTIVE_DATE DESC),0) VALUE
    FROM (SELECT DISTINCT EFFECTIVE_DATE FROM @INVENTORY) D
    CROSS JOIN (SELECT DISTINCT ITEM FROM @INVENTORY) I
) GROUPED_VALUES
GROUP BY EFFECTIVE_DATE
0 голосов
/ 16 февраля 2011

Попробуйте этот запрос.Сначала выберите максимальную дату для каждого элемента, а затем объедините ее с исходной таблицей, чтобы получить общее значение.

0 голосов
/ 16 февраля 2011
SELECT EFFECTIVE_DATE, SUM(VALUE) AS TOTAL_VALUE
FROM @INVENTORY
GROUP BY EFFECTIVE_DATE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...