0
votes

Ora-00979 pas un groupe par expression avec le cas

Obtenir ora-00979 Pas un groupe par expression Je ne trouve pas le problème.

Tous les paramètres Sélectionner apparaissent dans le groupe par: xxx


4 commentaires

La façon dont je le vois, c'est ok aussi loin que Oracle (base de données) est concerné. Êtes-vous sûr que c'est la requête qui soulève l'erreur? Je vois que vous avez marqué la question avec Java Tag. Pourrait-il être qu'il gâte la requête? (Je ne parle pas Java).


Sont ces deux lignes vides, entre le et le groupe par , faisant partie du texte de la requête que vous essayez d'exécuter? Si oui, éliminez-les d'eux. Sinon, modifiez votre question pour afficher le texte de requête exacte.


Il est avec des lignes vides, enlevées, même erreur


Où dirigez-vous la requête? Pourrait-il être la ligne vide est traitée à la fin de la requête (cela pourrait être dépend des paramètres)?


3 Réponses :


0
votes

Vous pouvez simplifier votre requête à l'aide de la sous-requête comme suit:

SELECT
    MERCHANT_NAME,
    CONTRACT_ID,
    TERMINAL_NUMBER,
    POSTING_DATE,
    CATEGORY,
    TRX_TYPE_DESC,
    CURRENCY_ID,
    SUM(SETTLE_AMOUNT_ORG) AS "SUM(T.GROSS_AMOUNT_ORG)",
    COUNT(*)
FROM
    (
        SELECT
            CASE
                WHEN :CONTRACT_NUMBER LIKE '001-CR-%' THEN T.PARTNER_NAME
                ELSE T.OPPORTUNITY_NAME
            END MERCHANT_NAME,
            CASE
                WHEN :CONTRACT_NUMBER LIKE '001-CR-%' THEN T.ACQ_CONTRACT_NUM_PRT
                ELSE T.ACQ_CONTRACT_NUM_MER
            END CONTRACT_ID,
            T.TARGET_MID_ID      AS TERMINAL_NUMBER,
            T.ACQ_POSTING_DATE   AS POSTING_DATE,
            'Processing Activity' CATEGORY,
            CASE
                WHEN TY.CREDORAX_TRX_TYPE = 'Refund' THEN 'Refund (Credit)'
                ELSE TY.CREDORAX_TRX_TYPE
            END AS TRX_TYPE_DESC,
            CU.CURRENCY_ID,
            T.SETTLE_AMOUNT_ORG
        FROM
            TMP_PROC T
            JOIN DWH.DIM_TRX_TYPE TY ON T.TRX_TYPE_KEY = TY.TRX_TYPE_KEY
            JOIN TMP_CURRENCY CU ON CU.CURRENCY_KEY = T.SETTLE_CURRENCY_KEY
    )
GROUP BY
    MERCHANT_NAME,
    CONTRACT_ID,
    TERMINAL_NUMBER,
    POSTING_DATE,
    CATEGORY,
    TRX_TYPE_DESC,
    CURRENCY_ID


0 commentaires

0
votes

Ne le fais pas de cette façon. Ne mettez pas d'expressions de cas dans le groupe par clause.

Essayez la requête de ré-écriture sans expression de cas du tout: xxx

Lorsque vous avez cela fonctionnant, puis wallez dans un autre SQL pour faire des expressions de cas: xxx

qui peut mieux fonctionner.


0 commentaires

0
votes

Séparez la logique de cas du groupe en mettant le boîtier dans une expression de table commune, puis effectuez le groupe par la CTE:

CASE
  WHEN SUBSTR(:contract_number, 1, 7) ='001-CR-' THEN t.PARTNER_NAME
  ELSE t.OPPORTUNITY_NAME
END AS MERCHANT_NAME


0 commentaires