Sql server 2005 表示有效日期总值的查询

Sql server 2005 表示有效日期总值的查询,sql-server-2005,Sql Server 2005,给定一个包含特定日期存货中单个项目价值的表,如何返回反映每个唯一日期总价值的汇总数据 例如,给定以下结构: 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-

给定一个包含特定日期存货中单个项目价值的表,如何返回反映每个唯一日期总价值的汇总数据

例如,给定以下结构:

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表示所有四个不同项目的最新值之和,尽管其中只有两个项目有当天的记录。

这显示了每个日期项目的值:

SELECT EFFECTIVE_DATE, SUM(VALUE) AS TOTAL_VALUE
FROM @INVENTORY
GROUP BY EFFECTIVE_DATE
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

尝试此查询。它首先为每个项目选择最长日期,然后将其与原始表联接以获得总值

;WITH Items as
(
select  Item,MAX(EFFECTIVE_DATE) Med
from    @INVENTORY
group by Item
)
select  sum(Value)
from    Items a inner join
        @INVENTORY b on a.Item=b.Item and a.Med=b.EFFECTIVE_DATE

没那么简单。我仍然需要包括前几天记录的金额,如果没有必要在每个独特的日子记录每个项目。我不确定你的意思是什么。请澄清,最好是通过编辑您的问题来显示所需的数字。我试图更好地解释它,但例如,在最后一天,您的代码会给我15.02,而它应该是110.04,如我所需的输出所示。所有项目的每个有效值为10.01+50.01+45.01+5.01。为什么110.04总数不包括2011-01-01?听起来你想要一个连续的总数,但我不明白你是如何得到你的值的。@Nimrod,是的,但前提是同一个项目没有最近的值。太好了!第一个查询可能也会派上用场。非常感谢。如果只考虑最近的总数,那就行了。LukLed的回答显示了我正在寻找的历史细节。