【问题标题】:Can't get all order items & keep getting orders lines which have sub-components无法获取所有订单项目并继续获取具有子组件的订单行
【发布时间】:2019-07-22 19:19:19
【问题描述】:

您好,我希望有人可以帮助我或给我一个 SQL 查询的线索,我需要在 Crystal Report 2008 中开发一个 Pick List 报表。以下查询显示具有父部件子组件的项目的订单行并且不订购不是子组件而只是独立项目的项目行。我们需要显示所有订单行。有人可以帮忙吗?

SELECT "SorMaster"."SalesOrder",
       "SorMaster"."Customer",
       "SorMaster"."OrderDate",
       "CusSorMaster_"."CheckedBy",
       "ArCustomer"."SoldToAddr1",
       "ArCustomer"."SoldToAddr2",
       "ArCustomer"."SoldToAddr3",
       "ArCustomer"."SoldToAddr4",
       "ArCustomer"."SoldToAddr5",
       "ArCustomer"."SoldPostalCode",
       "SorMaster"."ShipAddress1",
       "SorMaster"."ShipAddress2",
       "SorMaster"."ShipAddress3",
       "SorMaster"."ShipAddress4",
       "SorMaster"."ShipAddress5",
       "SorMaster"."ShipPostalCode",
       "ArCustomer"."Name",
       "SorMaster"."CustomerName",
       "SorMaster"."CustomerPoNumber",
       "CusSorMaster_"."CusJobRef",
       "SorDetail"."MOrderQty",
       "SorDetail"."MStockDes",
       "SorDetail"."MBackOrderQty",
       "SorDetail"."MShipQty",
       "SorMaster"."ReqShipDate",
       "SorDetail"."LineType",
       "SorMaster"."ShippingInstrs",
       "SorMaster"."Salesperson",
       "SorDetail"."MStockCode",
       "InvWarehouse"."DefaultBin",
       "BomNarration"."Narration",
       "BomStructure"."Component",
       "InvMaster"."Description",
       "BomStructure"."QtyPer"
FROM("SysproCompanyT"."dbo"."InvMaster" "InvMaster"
     INNER JOIN((((("SysproCompanyT"."dbo"."SorDetail" "SorDetail"
                    INNER JOIN "SysproCompanyT"."dbo"."InvWarehouse" "InvWarehouse" ON ("SorDetail"."MStockCode" = "InvWarehouse"."StockCode")
                                                                                   AND ("SorDetail"."MWarehouse" = "InvWarehouse"."Warehouse"))
                   INNER JOIN "SysproCompanyT"."dbo"."SorMaster" "SorMaster" ON "SorDetail"."SalesOrder" = "SorMaster"."SalesOrder")
                  INNER JOIN "SysproCompanyT"."dbo"."BomStructure" "BomStructure" ON "SorDetail"."MStockCode" = "BomStructure"."ParentPart")
                 INNER JOIN "SysproCompanyT"."dbo"."CusSorMaster+" "CusSorMaster_" ON "SorMaster"."SalesOrder" = "CusSorMaster_"."SalesOrder")
                FULL OUTER JOIN "SysproCompanyT"."dbo"."ArCustomer" "ArCustomer" ON "SorMaster"."Customer" = "ArCustomer"."Customer")ON "InvMaster"."StockCode" = "BomStructure"."Component")
    LEFT OUTER JOIN "SysproCompanyT"."dbo"."BomNarration" "BomNarration" ON "BomStructure"."AutoNarrCode" = "BomNarration"."NarrationNum"
WHERE ("SorDetail"."LineType" = '1'
    OR "SorDetail"."LineType" = '7')
ORDER BY "SorMaster"."SalesOrder",
         "SorDetail"."MStockCode",
         "InvWarehouse"."DefaultBin";

【问题讨论】:

    标签: sql sql-server crystal-reports crystal-reports-2008


    【解决方案1】:

    您的问题是 BomStructure 上的 JOIN,因为您想要不在此表中的项目。你可以像这样尝试stg,但我对表演有点害怕:

    SELECT "SorMaster"."SalesOrder",
    --- ... No change between these lines ...
           "InvWarehouse"."DefaultBin",
           tmpBom."Narration",
           tmpBom."Component",
           tmpBom."Description",
           tmpBom."QtyPer"
    FROM    
            (           
                (
    
                    "SysproCompanyT"."dbo"."SorDetail" "SorDetail"
                    INNER JOIN "SysproCompanyT"."dbo"."InvWarehouse" "InvWarehouse" ON ("SorDetail"."MStockCode" = "InvWarehouse"."StockCode") AND ("SorDetail"."MWarehouse" = "InvWarehouse"."Warehouse")
                    INNER JOIN "SysproCompanyT"."dbo"."SorMaster" "SorMaster" ON "SorDetail"."SalesOrder" = "SorMaster"."SalesOrder"
                    INNER JOIN "SysproCompanyT"."dbo"."CusSorMaster+" "CusSorMaster_" ON "SorMaster"."SalesOrder" = "CusSorMaster_"."SalesOrder"
                    INNER JOIN (
                        SELECT  InvMaster.Code AS Component, InvMaster.Description, BomStructure.QtyPer, BomNarration.Narration, ISNULL(BomStructure.ParentPart, InvMaster.StockCode) AS ParentOrOrphan
                        FROM    "SysproCompanyT"."dbo"."InvMaster" "InvMaster" 
                                LEFT JOIN "SysproCompanyT"."dbo"."BomStructure" ON "BomStructure"."Component" = "InvMaster"."StockCode"
                                LEFT JOIN "SysproCompanyT"."dbo"."BomNarration" "BomNarration" ON "BomStructure"."AutoNarrCode" = "BomNarration"."NarrationNum"
                        ) tmpBom ON "SorDetail"."MStockCode" = tmpBom.ParentOrOrphan
                )
            )
            FULL OUTER JOIN "SysproCompanyT"."dbo"."ArCustomer" "ArCustomer" ON "SorMaster"."Customer" = "ArCustomer"."Customer"
    WHERE ("SorDetail"."LineType" = '1' OR "SorDetail"."LineType" = '7')
    -- TO BE REPLACED BY : WHERE ("SorDetail"."LineType" IN ('1', '7')
    ORDER BY "SorMaster"."SalesOrder",
             "SorDetail"."MStockCode",
             "InvWarehouse"."DefaultBin";
    

    【讨论】:

    • tmpBom 子查询应该返回对 {component ; parent } 用于子组件,{material;material} 用于不在 BOM 中的项目
    • 另一种选择是使用UNION ALL 代替子查询:
    • 谢谢。现在我需要找出是否有办法在 Crystal 报表 2008 中进行翻译。
    • 尝试在 SQL Server 中使用此查询创建一个视图,并在 Crystal Reports 2008 中调用 SELECT ... FROM myView。它应该隐藏 CR 2008 的复杂性
    【解决方案2】:

    这与这段代码有什么关系吗?您是否选择了包含独立项的 LineType?

    WHERE ("SorDetail"."LineType" = '1'
    OR "SorDetail"."LineType" = '7')
    

    【讨论】:

    • 否,因为存在其他未显示这些条件的订单。
    • 我可以在这里提供更多上下文吗? LineType 是否指示订单行是子组件还是独立的?如果是,独立订单行和子组件的 LineType 值是多少?
    • 线路类型为以下之一 1. 有库存 2. 无库存 3. 运费 4. 杂项 5. 备注 6. 标准备注 7. 服务费。我们只想查看有库存商品的订单并收取服务费,因此包含在查询中。它与项目是否是子组件无关。
    猜你喜欢
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多