代码之家  ›  专栏  ›  技术社区  ›  Edward

SQL Server-需要在多个返回的记录中求和值

  •  -2
  • Edward  · 技术社区  · 8 年前

    在下面的查询中,我尝试在项目 6112040的两个位置将totalqty设置为 sum 我确实需要将 6112040的两行分开,以便捕获不同的位置。

    这个查询使用名为java.groovy的东西输入JasperIReport。尽管如此,印刷出来的PDF还没有一个是时髦的或是染成棕色的。也许有人也可以解决这个问题,但是这个问题优先于

    我知道戈登·林诺夫大约一小时后就会来,也许他能帮上忙。

    declare@receipt int
    设置@收据=20
    
    选择
    ent.仓库sku作为仓库sku,
    ent.pallet作为[接收到的行李],
    IsNull(inv.locationname,“)为[实际分配],
    总和(isNull(inv.qty,0))作为[位置数量],
    总和(isNull(inv.qty,0))为[总数量],
    max(cast(ent.receiptlinenumber as int))as[linenumber],
    最大值(ent.仓库批次参考)为[仓库批次],
    左(sum(ent.weightexpected),7)为[grossweight],
    左(和(投资[重量]),7)为[网络重量]
    从仓库接收详细信息作为DET
    内部连接仓库接收详细信息
    在det.receiptNumber=ent.receiptNumber上
    和det.facilityname=ent.facilityname
    和det.warehousename=ent.warehousename
    和det.receiptlinenumber=ent.receiptlinenumber
    左外部联接库存为库存
    on inv.warehouseName=仓库名称
    和inv.facilityname=det.facilityname
    和inv.warehousesku=det.warehousesku
    和inv.customerLotReference=ent.customerLotReference
    和inv.lotreeferenceone=det.receiptnumber
    和isNull(ent.caseid,“)=isNull(inv.caseid,”)
    在哪里?
    det.warehouseName=$仓库
    and det.facilityname=$设备
    和det.receiptNumber=@收据
    分组依据
    托盘式耳鼻喉科
    ,ent.仓库sku
    ,投资地点名称
    ,库存数量
    ,投资批次参考1
    按ent.仓库sku排序
    
    
    

    我需要部分合并的行在上面的返回中是4和5。6112040个分开以捕捉不同的位置。

    这个查询使用名为java.groovy的东西输入JasperIReport。尽管如此,印刷出来的PDF还没有一个是时髦的或是染成棕色的。也许有人也能解决这个问题,但是总和问题优先

    我知道戈登·林诺夫大约一小时后就会来,也许他能帮上忙。

    DECLARE @receipt INT 
    SET @receipt = 20 
    
    SELECT
        ent.WarehouseSku AS WarehouseSku,
        ent.PalletId AS [ReceivedPallet],
        ISNULL(inv.LocationName,'') AS [ActualLoc],
        SUM(ISNULL(inv.Qty,0))  AS [LocationQty],
        SUM(ISNULL(inv.Qty,0)) AS [TotalQty],
        MAX(CAST(ent.ReceiptLineNumber AS INT)) AS [LineNumber],
        MAX(ent.WarehouseLotReference) AS [WarehouseLot],
        LEFT(SUM(ent.WeightExpected),7) AS [GrossWeight],
        LEFT(SUM(inv.[Weight]),7) AS [NetWeight]
    FROM WarehouseReceiptDetail AS det
    INNER JOIN WarehouseReceiptDetailEntry AS ent
        ON det.ReceiptNumber = ent.ReceiptNumber
        AND det.FacilityName = ent.FacilityName
        AND det.WarehouseName = ent.WarehouseName
        AND det.ReceiptLineNumber = ent.ReceiptLineNumber
    LEFT OUTER JOIN Inventory AS inv
        ON inv.WarehouseName = det.WarehouseName
        AND inv.FacilityName = det.FacilityName
        AND inv.WarehouseSku = det.WarehouseSku
        AND inv.CustomerLotReference = ent.CustomerLotReference
        AND inv.LotReferenceOne = det.ReceiptNumber
        AND ISNULL(ent.CaseId,'') = ISNULL(inv.CaseId,'')
    WHERE
            det.WarehouseName = $Warehouse
        AND det.FacilityName = $Facility
        AND det.ReceiptNumber = @receipt
    GROUP BY
            ent.PalletId
        ,   ent.WarehouseSku
        ,   inv.LocationName
        ,   inv.Qty
        ,   inv.LotReferenceOne
    ORDER BY ent.WarehouseSku
    

    sample data 我需要部分合并的行在上面的返回中是4和5。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Alan    8 年前

    使用子查询创建第二个数据集并联接到该子查询-您可以从以下内容进行推断以应用于您的情况:

    首先是子查询:

    SELECT
        WarehouseSku,
        SUM(Qty)
    FROM
        Inventory
    GROUP BY
        WarehouseSku
    

    现在应用于您的查询-插入到 FROM 条款:

    ...
        LEFT JOIN (
            SELECT
                WarehouseSKU,
                SUM(Qty)
            FROM
                Inventory
            GROUP BY
                WarehouseSKU
        ) AS TotalQty
        ON Warehouse.WarehouseSku = TotalQty.WarehouseSku
    

    如果看不到实际的模式DDL,就很难知道确切的基数,但我认为这将为您指明正确的方向。