声明重复的表插入值
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 BY
和DISTINCT
的查询总是有缺陷的。 DISTINCT
是多余的并导致不必要的开销,或者 GROUP BY
是错误的(需要修复,并删除 DISTINCT
)。
你为什么要把数据INSERT
ing 到一个临时表中?为什么不干脆用 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 关系添加值时如何避免插入重复条目?