Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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
总和项目&;具有多个表的数量&;如果MySQL_Mysql - Fatal编程技术网

总和项目&;具有多个表的数量&;如果MySQL

总和项目&;具有多个表的数量&;如果MySQL,mysql,Mysql,我想显示所有带有数量的项目。但数量在不同的表中 示例输出: Item Quantity Item1 34 Item2 10 Item3 0 ........ 我有一个代码,可以计数数量,但只能在单个项目中。 SELECT SUM(ROUND(Quantity)) FROM( SELECT COALESCE(SUM(od.Quantity),0) as 'Quantity' FROM sts as T1 LEFT JOIN orderset_details as od ON T

我想显示所有带有数量的项目。但数量在不同的表中

示例输出:

Item    Quantity
Item1   34
Item2   10
Item3   0
........
我有一个代码,可以计数数量,但只能在单个项目中。

SELECT SUM(ROUND(Quantity)) FROM(
SELECT
COALESCE(SUM(od.Quantity),0) as 'Quantity'
FROM sts as T1
LEFT JOIN orderset_details as od ON T1.OrdersetId = od.OrdersetId
WHERE od.ItemId = '4786' 
UNION ALL
SELECT 
COALESCE(SUM(od.Quantity),0) as 'Quantity'
FROM drs as T2
LEFT JOIN orderset_details as od ON T2.OrdersetId = od.OrdersetId
WHERE od.ItemId = '4786' 
UNION ALL  
SELECT 
COALESCE(SUM(IF(r.AddsToStock = '1', od.Quantity, 0 - od.Quantity)),0) as 'Quantity'
FROM stockadjustment as T3
LEFT JOIN reason as r ON r.ReasonId = T3.ReasonId
LEFT JOIN orderset_details as od ON T3.OrdersetId = od.OrdersetId 
WHERE od.ItemId = '4786'
UNION ALL
SELECT 
COALESCE(SUM(IF(T4.OrdersetId = od.OrdersetId, 0 - od.Quantity, -1 * od.Quantity)),0) as 'Quantity'
FROM issueslip as T4
LEFT JOIN orderset_details as od ON T4.OrdersetId = od.OrdersetId 
WHERE od.ItemId = '4786'
UNION ALL
SELECT 
COALESCE(SUM(IF(T4.OrdersetId = od.OrdersetId, 0 - od.Quantity, -1 * od.Quantity)),0) as 'Quantity'
FROM invoice as T4
LEFT JOIN orderset_details as od ON T4.OrdersetId = od.OrdersetId
WHERE od.ItemId = '4786') as t
如何使用此代码实现项目?

表名
且id为
ItemId

  • 创建此存储函数:

    DELIMITER //
    
    CREATE FUNCTION getItemQty(
        _itemID INT(10)
    )
    RETURNS INT
    BEGIN
    
    RETURN (SELECT 
            SUM(ROUND(Quantity)) 
        FROM (
            SELECT
                COALESCE(SUM(od.Quantity),0) as Quantity
            FROM sts as T1
            LEFT JOIN orderset_details as od 
                ON T1.OrdersetId = od.OrdersetId
            WHERE od.ItemId = _itemID
            UNION ALL
            SELECT 
                COALESCE(SUM(od.Quantity),0) as Quantity
            FROM drs as T2
            LEFT JOIN orderset_details as od 
                ON T2.OrdersetId = od.OrdersetId
            WHERE od.ItemId = _itemID
            UNION ALL  
            SELECT 
                COALESCE(
                    SUM(
                        IF(r.AddsToStock = '1', od.Quantity, 0 - od.Quantity)
                    ),0
                ) as Quantity
            FROM stockadjustment as T3
            LEFT JOIN reason as r 
                ON r.ReasonId = T3.ReasonId
            LEFT JOIN orderset_details as od 
                ON T3.OrdersetId = od.OrdersetId 
            WHERE od.ItemId = _itemID
            UNION ALL
            SELECT 
                COALESCE(
                    SUM(
                        IF(T4.OrdersetId = od.OrdersetId, 0 - od.Quantity, -1 * od.Quantity)
                    ),0
                ) as Quantity
            FROM issueslip as T4
            LEFT JOIN orderset_details as od 
                ON T4.OrdersetId = od.OrdersetId 
            WHERE od.ItemId = _itemID
            UNION ALL
            SELECT 
                COALESCE(
                    SUM(
                        IF(T4.OrdersetId = od.OrdersetId, 0 - od.Quantity, -1 * od.Quantity)
                    ),0
                ) as Quantity
            FROM invoice as T4
            LEFT JOIN orderset_details as od 
                ON T4.OrdersetId = od.OrdersetId
            WHERE od.ItemId = _itemID
        ) as t);
    END//
    
  • 使用该查询获取数据

    SELECT 
        ItemId,
        getItemQty(ItemId) AS quantity
    FROM items
    

  • 我稍后会试试,因为我需要一些睡眠,但我想这就是我想要的:)我稍后会测试。感谢您回答(y)
    #1054-where子句中的未知列“i.ItemId”
    我明白了,这是因为我们有两级子查询,无法访问外部查询的数据。尝试第二个查询。如果它不起作用,我仍然可以尝试一些东西。我不知道如何使用该查询实现
    items
    表。我不知道。我真的需要你的帮助。你是说
    表还不存在吗?抱歉,让我概括一下,您的项分布在查询中使用的所有表中,您希望将数据重新组合到一个表中。这是你想要的吗?<代码>左联接X,其中X <代码>与<代码>内部连接X <代码>相同。如果你愿意,考虑下面的简单的两步过程:1。如果您还没有这样做,请提供适当的CREATE和INSERT语句(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果您还没有这样做,请提供一个与步骤1中提供的信息相对应的所需结果集。@很抱歉,我是MySQL新手,尽管我使用MySQL已经多年了。这是我第一次遇到太多的加入。