【问题标题】:SSRS/Oracle - Calculated Field error message: ORA-01747 invalid table.column, table.column, or column specificatio/SSRS/Oracle - 计算字段错误消息:ORA-01747 无效 table.column、table.column 或列规范/
【发布时间】:2018-12-27 17:46:41
【问题描述】:

下面的 SQL 查询有效...但是当我添加“FreightCostsPerOrderSplit”字段(3 个新字段)时,我收到如下所示的 ORA-01747 错误消息。这些约定类似于之前在 SQL 代码中所做的,我不确定是什么导致了这个错误消息。

第 49 行出错 ORA-01747:user.table.column、table.column 无效, 或列规范

当我发布这个问题时,我想出了解决方案。我决定为可能遇到同样问题的其他人发布此答案。

解决方案涉及在计算字段的除数中将COUNT(OHH.*) 替换为COUNT(OHH.FieldName)。有关count(*) vs count(column-name) 语法的评论,请参见答案部分。

, (SUM(cteLoadFreightAgg.TOTALFREIGHT)/ COUNT(OHH.*)) AS "TotalFreight_SplitPerOrder"

SQL 代码(在第 49 行中断,答案中发布了解决方案):

    /* A list of aggregated freight carrier data grouped by LOAD (no BILLTOCUST)
    Pulled from [LOAD_CARRIER] table.  Another option is [FRT_LOAD] which include LUMPER
    SOURCE: Loads Underutilize Report
    */
    cteLoadFreightAgg AS
    (
        SELECT
            LOAD_CARRIER.LOAD_SEQ_CODE AS LoadNumber
            , SUM(LOAD_CARRIER.FLAT_FRT + LOAD_CARRIER.FUEL_FRT + LOAD_CARRIER.DROP_FRT + LOAD_CARRIER.MISC_FRT + LOAD_CARRIER.OUT_ROUTE_FRT + LOAD_CARRIER.LAYOVER_FRT) AS TotalFreight
            , SUM(LOAD_CARRIER.DROP_FRT + LOAD_CARRIER.MISC_FRT + LOAD_CARRIER.OUT_ROUTE_FRT + LOAD_CARRIER.LAYOVER_FRT) AS AssessorialsFreight
            , SUM(LOAD_CARRIER.FLAT_FRT) AS FlatRateFreight
            , SUM(LOAD_CARRIER.FUEL_FRT) AS FuelFreight
        FROM
            LOAD_CARRIER
        GROUP BY
            LOAD_CARRIER.LOAD_SEQ_CODE
    )



SELECT
    OHH.BILL_COMP_CODE
    , LOAD.DEPART_FROM_WHSE_CODE
    , OHH.SHIP_FROM_WHSE
    , OHH.ORDER_SEQ_CODE
    , OHH.LOAD_SEQ_CODE
    , OHH.SHIP_DATE
    , CARRIER.NAME AS CarrierName
    , OHH.DELIVERY_DATE
    , CUST.CUST_CODE || '-' || CUST.CUST_SHIPTO_CODE AS ShiptoCustCode
    , CUST.NAME AS ShiptoName
    , OHH.BILL_PO_ID
    , CUST.CITY
    , CUST.STATE_CODE
    , LOAD.TALLY_DATE_TIME
    , OHH.APPT_DATE
    , OHH.APPT_TIME
    , OHH.EST_PALLETS
    , OHH.EST_GROSS_WGT
    , OHH.EST_NET_WGT
    , LOAD.CLASS_CODE
    , SUM(ODH.WEIGHT_SHIPPED) AS "SUM_ODH_WeightShipped"
    -- FreightCostLoad
    , cteLoadFreightAgg.TOTALFREIGHT
    , cteLoadFreightAgg.FUELFREIGHT
    , (cteLoadFreightAgg.TOTALFREIGHT - cteLoadFreightAgg.FUELFREIGHT) AS "OTHERFREIGHT"
    -- FreightCostsPerOrderSplit
    , (SUM(cteLoadFreightAgg.TOTALFREIGHT)/ COUNT(OHH.*)) AS "TotalFreight_SplitPerOrder"
    , (SUM(cteLoadFreightAgg.FUELFREIGHT) / COUNT(OHH.*)) AS "FuelFreight_SplitPerOrder"
    , ((SUM(cteLoadFreightAgg.TOTALFREIGHT) - SUM(cteLoadFreightAgg.FUELFREIGHT))/ COUNT(OHH.*)) AS "OtherFreight_SplitPerOrder"

FROM
    ROCCO.CARRIER CARRIER
    INNER JOIN ROCCO.LOAD_CARRIER LOAD_CARRIER
        ON  CARRIER.CARRIER_CODE = LOAD_CARRIER.CARRIER_CODE
    INNER JOIN ROCCO.ORD_HDR_HST OHH
        ON  LOAD_CARRIER.LOAD_SEQ_CODE = OHH.LOAD_SEQ_CODE
    INNER JOIN ROCCO.ORD_DTL_HST ODH
        ON  OHH.ORDER_SEQ_CODE = ODH.ORDER_SEQ_CODE
    INNER JOIN ROCCO.LOAD LOAD
        ON  OHH.LOAD_SEQ_CODE = LOAD.LOAD_SEQ_CODE
    INNER JOIN ROCCO.CUSTOMER_SHIPTO CUST
        ON  OHH.CUST_CODE = CUST.CUST_CODE
            AND OHH.CUST_SHIPTO_CODE = CUST.CUST_SHIPTO_CODE
    INNER JOIN cteLoadFreightAgg
        ON  LOAD.LOAD_SEQ_CODE = cteLoadFreightAgg.LOADNUMBER
WHERE
--    OHH.SHIP_DATE BETWEEN :paramStartDate AND :paramEndDate
--    AND OHH.STATUS_CODE<>'DL'
--    AND OHH.BILL_COMP_CODE         IN (:paramCompany)
--    AND LOAD.DEPART_FROM_WHSE_CODE IN (:paramWarehouse)
--    AND OHH.MASTER_ORDER_NBR IS NULL
--    AND LOAD.CLASS_CODE                                IN (:paramClassCode)
--    AND CUST.CUST_CODE || '-' || CUST.CUST_SHIPTO_CODE IN (:paramShipto)
--    /*
    OHH.SHIP_DATE BETWEEN TO_DATE('10/1/2018', 'MM/DD/YYYY') AND TO_DATE('10/31/2018', 'MM/DD/YYYY')
    AND OHH.STATUS_CODE<>'DL'
    AND OHH.BILL_COMP_CODE=100
    AND OHH.MASTER_ORDER_NBR IS NULL
--    */


GROUP BY
    OHH.BILL_COMP_CODE
    , LOAD.DEPART_FROM_WHSE_CODE
    , OHH.SHIP_FROM_WHSE
    , OHH.ORDER_SEQ_CODE
    , OHH.LOAD_SEQ_CODE
    , OHH.SHIP_DATE
    , CARRIER.NAME
    , OHH.DELIVERY_DATE
    , CUST.CUST_CODE || '-' || CUST.CUST_SHIPTO_CODE
    , CUST.NAME
    , OHH.BILL_PO_ID
    , CUST.CITY
    , CUST.STATE_CODE
    , LOAD.TALLY_DATE_TIME
    , OHH.APPT_DATE
    , OHH.APPT_TIME
    , OHH.EST_PALLETS
    , OHH.EST_GROSS_WGT
    , OHH.EST_NET_WGT
    , LOAD.CLASS_CODE
    , cteLoadFreightAgg.FUELFREIGHT
    , cteLoadFreightAgg.TOTALFREIGHT
ORDER BY
    OHH.SHIP_DATE
                                                      *
Error at line 49
ORA-01747: invalid user.table.column, table.column, or column specification

【问题讨论】:

    标签: sql oracle reporting-services


    【解决方案1】:

    最初我的计算字段为:

    , (SUM(cteLoadFreightAgg.TOTALFREIGHT)/ COUNT(OHH.*)) AS "TotalFreight_SplitPerOrder"

    对于所有 3 个计算字段,我将除数字段更改为引用特定字段,错误消息已解决。然后,一旦成功解析该语法,SSRS 报告就会给出“#VALUE”错误消息,我必须使用 CAST() 函数来获得正确的评估,而不是 SSRS 报告中的错误消息。

    , CAST((cteLoadFreightAgg.TOTALFREIGHT/ COUNT(OHH.ORDER_SEQ_CODE) OVER(PARTITION BY OHH.LOAD_SEQ_CODE)) AS NUMERIC(9,2)) AS "TotalFreight_SplitPerOrder"

    因此,在解决了原始错误消息之后,我发现我应该使用 WINDOWING 函数来根据报告要求来划分值。

    我在线阅读了一些关于“为什么 COUNT(FieldName) 评估而 COUNT(*) 给出错误消息?”的答案。我遇到了一些博客文章,但它们主要是关于性能问题,而不是行数划分或我收到的此错误消息。

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 2012-03-16
      • 2018-12-19
      • 2013-04-28
      • 2013-10-21
      • 1970-01-01
      • 2016-10-25
      • 2021-03-05
      • 2012-01-21
      相关资源
      最近更新 更多