显示所有股票时日期范围的SQL总和

时间:2014-04-08 16:38:25

标签: sql sql-server

SELECT     STOCK.NUMBER, SUM(ITEMS.QUANTO) AS USAGE, STOCK.DESC1, STOCK.UNITS, STOCK.LOW
FROM         ITEMS INNER JOIN
                      STOCK ON ITEMS.ITEM = STOCK.NUMBER
WHERE     (ITEMS.IT_SDATE BETWEEN '3/31/14' AND '4/5/14')
GROUP BY STOCK.NUMBER, STOCK.DESC1, STOCK.UNITS, STOCK.LOW

此查询会返回所有项目以及本周发货的数量。但是,它没有返回本周未发货的物品库存。我需要保持数量的SUM仅在指定的时间内查看产品使用情况,同时返回所有库存项目,只显示0用于使用或null。

1 个答案:

答案 0 :(得分:1)

如果您要查找Stock中的所有项目以及Item中的一些值,您应该可以颠倒JOIN条件的顺序并将其更改为INNER(仅匹配的项目)到LEFT(来自第一个的所有记录)表格以及第二个中找到的匹配项,如下所示:

SELECT     STOCK.NUMBER, SUM(ITEMS.QUANTO) AS USAGE, STOCK.DESC1, STOCK.UNITS, STOCK.LOW
FROM
    STOCK 
     LEFT JOIN
    ITEMS ON 
        ITEMS.ITEM = STOCK.NUMBER AND 
        ITEMS.IT_SDATE BETWEEN '3/31/14' AND '4/5/14'
GROUP BY STOCK.NUMBER, STOCK.DESC1, STOCK.UNITS, STOCK.LOW

这将显示Stock表格中的所有内容,但Items.Quanto的SUM()只会从您指定的时间段中提取数据。将日期范围设置为JOIN条件意味着它仅在查看要从Items表中提取的数据时进行评估,而不是在查看从两个表中提取的内容时进行评估。