SQL 仅联接 1 行 - SQL Server 2005

标签 sql sql-server-2005 t-sql

我有一个分配库存表,其中包含案例编号(称为 TPND)和数量。我需要选择产品库存列表,但会显示产品编号(称为 TPNB)而不是箱号。我还有一个 ProductLookup 表,其中包含所有 TPNB 和 TPND。

分配库存
已分配StockID身份
TPND int
数量整数

产品查找
ProductLookupID 身份
TPND int
TPNB 整数

可以在多个案例类型 (TPND) 中提供多种产品类型 (TPNB)。所需的结果是持有的每种产品类型的总数,我使用了 sum() 函数,如下所示:

select TPNB, sum(AllocatedQty) as 'QTY'
from integration.ProductLookup as PL 
inner join  dbo.AllocatedStock as AStock
on PL.TPND = AStock.TPND
group by TPNB

不幸的是,ProductLookup 表包含一些重复行(无法清除的历史错误数据),其中一行包含与另一行相同的 TPND 和 TPNB。我需要加入 ProductLookup 表的唯一目的是获取 AlownedStock 表中 TPND 的 TPNB。有没有办法让连接只选择第一个匹配项?我目前遇到的问题是,对于 ProductLookup 表中具有重复行的 TPND,我返回的数量值是双倍的。

非常感谢您的帮助,

谢谢

罗布。

最佳答案

SELECT DISTINCT 应该这样做:

select TPNB, sum(AllocatedQty) as 'QTY'
from (SELECT DISTINCT TPND, TPNB FROM integration.ProductLookup) as PL 
inner join  dbo.AllocatedStock as AStock
on PL.TPND = AStock.TPND
group by TPNB

关于SQL 仅联接 1 行 - SQL Server 2005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2295495/

相关文章:

sql-server - 获取插入行的 PK Guid 的最佳方法

mysql - 从另一个表中的另一列计算列值

sql-server - SQL Server : pause a trigger

sql-server - sql if语句检查空参数

sql - 查询考试成绩计算

sql - 如何在 SQL 中以 0.25 增量执行自定义回合?

sql - MSOLEDBSQL 与 MSOLEDBSQL.1 有什么区别?

mysql - 将大型 .sql 文件导入 MySQL 时出错

sql - 将 SQL Server 数据库移动到新服务器

sql - PostgreSQL:如何选择给定日期范围内每一天每个帐户的最后余额?