SSRS / Oracle - сообщение об ошибке вычисляемого поля: ORA-01747 неверный table.column, table.column или columnatio - PullRequest
0 голосов
/ 27 декабря 2018

SQL-запрос ниже работал ... Но когда я добавляю поля "FreightCostsPerOrderSplit" (3 новых поля), я получаю сообщение об ошибке ORA-01747, показанное ниже.Соглашения похожи на то, что делалось ранее в коде SQL, и я не был уверен, что может быть причиной этого сообщения об ошибке.

Ошибка в строке 49 ORA-01747: недопустимая спецификация user.table.column, table.column или 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

1 Ответ

0 голосов
/ 27 декабря 2018

Изначально у меня было вычисленное поле как:

, (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 (*) дал сообщение об ошибке?».Я наткнулся на несколько статей в блоге, но в основном они касались проблем производительности, а не деления количества строк или этого сообщения об ошибке, которое я получил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...