声明重复的表插入值

Posted

技术标签:

【中文标题】声明重复的表插入值【英文标题】:declare table inserted values duplicated 【发布时间】:2021-09-07 16:19:07 【问题描述】:

我尝试获取两个不同的表值来插入一个声明表,但员工 ID 重复,

DECLARE @WSotable TABLE 
                  (
                      Employee int, 
                      ChargedQty int,
                      ReturnQty int
                  )

--插入第一个表数据

INSERT INTO @WSotable
    SELECT DISTINCT
        MD_Employee.ID,
        SUM(TR_InvoiceDetails.InvoiceQuantity) AS ChargedQty,
        0 AS ChargedQty
    FROM
        TR_SalesOrderHeader 
    INNER JOIN 
        TR_InvoiceHeader ON TR_InvoiceHeader.SalesOrderID  = TR_SalesOrderHeader.ID 
    INNER JOIN 
        TR_InvoiceDetails ON TR_InvoiceDetails.InvoiceID = TR_InvoiceHeader.ID
    INNER JOIN 
        MD_ItemMaster ON TR_InvoiceDetails.ItemID  =  MD_ItemMaster.ID
    INNER JOIN 
        MD_Supplier ON MD_ItemMaster.SupplierID= MD_Supplier.ID
    INNER JOIN 
        MD_Employee ON TR_SalesOrderHeader.CreatedBy = MD_Employee.ID
    WHERE
        MD_Supplier.ID = 3 
        AND MD_ItemMaster.ID = 572
    GROUP BY
        MD_Employee.ID

--插入第二个表数据

INSERT INTO @WSotable
    SELECT DISTINCT
        MD_Employee.ID,
        0 AS ChargedQty,
        SUM(TR_SalesReturnDetails.ReturnQuantity) AS ReturnQty
    FROM
        TR_SalesReturnHeader
    INNER JOIN
        TR_SalesReturnDetails ON TR_SalesReturnDetails.SalesReturnID = TR_SalesReturnDetails.ID
    INNER JOIN 
        MD_ItemMaster ON TR_SalesReturnDetails.ItemID  =  MD_ItemMaster.ID
    INNER JOIN 
        MD_Supplier ON MD_ItemMaster.SupplierID= MD_Supplier.ID
    INNER JOIN 
        MD_Employee ON TR_SalesReturnHeader.CreatedBy = MD_Employee.ID
    WHERE
        MD_Supplier.ID = 3 
        AND MD_ItemMaster.ID = 572
    GROUP BY
        MD_Employee.ID

结果:

我需要停止 EmployeeID 重复

【问题讨论】:

您使用的是 [sql-server] 还是 [mysql]?您已在此处标记了两者。 选择一个 DBMS,任何 DBMS,但只有一个,最好是你实际使用的那个 MySQL 还是 MS SQL Server?上面的代码不会在两者上运行... 同时带有GROUP BYDISTINCT 的查询总是有缺陷的。 DISTINCT 是多余的并导致不必要的开销,或者 GROUP BY 是错误的(需要修复,并删除 DISTINCT)。 你为什么要把数据INSERTing 到一个临时表中?为什么不干脆用 2 个SUM 函数做一个SELECT 【参考方案1】:

返回带有最终聚合的数据:

select Employee, sum(ChargedQty) ChargedQty, sum(ReturnQty) ReturnQty
from @WSotable
group by Employee

【讨论】:

以上是关于声明重复的表插入值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL #1364 - 字段“column_name”没有默认值 - 无法插入数据库 [重复]

使用 union all 插入,并且 nextval 不适用于重复值

通过 sqlalchemy 关系添加值时如何避免插入重复条目?

MySQL:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]

如何从 SQL Server 中的表中删除重复行 [重复]

SQL Server插入空实例[重复]