Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 计算每个产品(Inkcode)的库存_Sql Server_Sql Server 2008_Sql Server 2005 - Fatal编程技术网

Sql server 计算每个产品(Inkcode)的库存

Sql server 计算每个产品(Inkcode)的库存,sql-server,sql-server-2008,sql-server-2005,Sql Server,Sql Server 2008,Sql Server 2005,我有两个表TBLINK接收和TBLINK发送。我想显示每个inkcode的库存余额。我尝试了下面的sql join查询,但在手动计算中交叉检查时,许多inkcode的计算都是错误的。哪里出错了 select r.inkcode, SUM(r.quantity) Stock-In, SUM(d.quantity) Stock-out, (SUM(r.quantity) - SUM(d.quantity)) Stock-Balance from Tblinkreceiving r,Tblinkdel

我有两个表TBLINK接收和TBLINK发送。我想显示每个inkcode的库存余额。我尝试了下面的sql join查询,但在手动计算中交叉检查时,许多inkcode的计算都是错误的。哪里出错了

select r.inkcode, SUM(r.quantity) Stock-In, SUM(d.quantity) Stock-out, (SUM(r.quantity) - SUM(d.quantity)) Stock-Balance from Tblinkreceiving r,Tblinkdelivery d where r.inkcode=d.inkcode
group by r.inkcode;

您已使用内部联接(隐式)来组合接收和传递。这意味着任何已接收但未交付的墨水代码都将从结果中排除

如果您可以假设,对于任何墨水交付,都必须有墨水收据(基于您无法交付尚未收到的内容的前提),那么您可以在tblInkReceiving上使用内部联接,如下所示:

SELECT r.inkcode, 
    SUM(r.quantity) AS Stock-In, 
    ISNULL(SUM(d.quantity), 0) AS Stock-out,
    SUM(r.quantity) - ISNULL(SUM(d.quantity), 0) AS Stock-Balance 
FROM Tblinkreceiving r LEFT JOIN Tblinkdelivery d ON r.inkcode = d.inkcode
GROUP BY r.inkcode
左连接将返回左侧(r)的所有记录,包括右侧(d)的匹配记录。如果d没有匹配的记录(即该墨水代码没有墨水交付),则这些行的值将为空

如果您不能假设墨水只有在收到后才能送达,那么您需要链接到墨水表(即inkcode为主键的表),或者合并接收表和送达表中的所有墨水代码,并链接到:

;WITH cte AS (SELECT inkcode FROM Tblinkreceiving 
    UNION 
    SELECT inkcode FROM Tblinkdelivery)
SELECT cte.inkcode, 
    SUM(r.quantity) AS Stock-In, 
    ISNULL(SUM(d.quantity), 0) AS Stock-out,
    SUM(r.quantity) - ISNULL(SUM(d.quantity), 0) AS Stock-Balance 
FROM cte LEFT JOIN Tblinkreceiving r ON cte.ink_code = r.ink_code
    LEFT JOIN Tblinkdelivery d ON cte.inkcode = d.inkcode
GROUP BY cte.inkcode

请发布一些示例数据和所需输出。参考编号接收日期inkcode数量价格接收ID 1001 2012-03-17 HP[130]20 107 18 1002 2012-03-25 HP[121]10 57 19参考编号交付日期inkcode数量交付平均价格2001-03-03 HP[121]1 28 63 2002 2012-03-06 HP 78A 5 29 195我如何使用表格中的deliverdate和receiverdate获得datewise月报?我如何使用表格中的deliverdate和receiverdate获得datewise月报?
;WITH cte AS (SELECT inkcode FROM Tblinkreceiving 
    UNION 
    SELECT inkcode FROM Tblinkdelivery)
SELECT cte.inkcode, 
    SUM(r.quantity) AS Stock-In, 
    ISNULL(SUM(d.quantity), 0) AS Stock-out,
    SUM(r.quantity) - ISNULL(SUM(d.quantity), 0) AS Stock-Balance 
FROM cte LEFT JOIN Tblinkreceiving r ON cte.ink_code = r.ink_code
    LEFT JOIN Tblinkdelivery d ON cte.inkcode = d.inkcode
GROUP BY cte.inkcode