【问题标题】:SQL Join to only 1 row - SQL Server 2005SQL 仅加入 1 行 - SQL Server 2005
【发布时间】:2010-02-19 10:18:51
【问题描述】:

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

分配库存
AllocatedStockID 身份
TPND 整数
数量说明

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

有多种产品类型 (TPNB) 可以在不止一个案例类型 (TPND) 中提供。这需要的结果是持有的每种产品类型的总数,我使用了 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 表的就是获取我在 AllocatedStock 表中的 TPND 的 TPNB。有没有办法让加入只选择第一场比赛?我目前遇到的问题是,对于在 ProductLookup 表中有重复行的 TPND,我会返回两倍的数量值。

如果有任何帮助,将不胜感激,

谢谢

罗伯。

【问题讨论】:

    标签: sql sql-server-2005 tsql


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      试一试。我正在使用派生查询来“清理”您的 productlookup 表。

       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
      

      【讨论】:

      • 该死的,你们这个速度很快!
      【解决方案3】:
      select distinct tpnb, qty
      from (
      select TPNB, sum(AllocatedQty) as 'QTY'
      from integration.ProductLookup as PL 
      inner join  dbo.AllocatedStock as AStock
      on PL.TPND = AStock.TPND
      group by ProductLookupID ) a
      

      【讨论】:

        【解决方案4】:
        select TPNB, sum(AllocatedQty) as 'QTY'
        from 
        (
            SELECT TPND, TPNB
            FROM ProductLookup
            GROUP BY TPND, TPNB
        ) as PL 
        inner join  dbo.AllocatedStock as AStock
        on PL.TPND = AStock.TPND
        group by TPNB
        

        【讨论】:

          猜你喜欢
          • 2013-01-01
          • 2013-09-22
          • 1970-01-01
          • 2019-05-21
          • 1970-01-01
          • 2015-01-30
          • 2012-01-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多