2017-06-05 1 views
2

Je suis un codeur SQL novice et j'ai besoin d'aide pour la requête SQL que je construis pour le GL Transaction Detail d'Oracle.Requête SQL - Détail de la transaction Oracle GL

J'ai été capable d'écrire ma requête, et je suis capable de mettre les données comme je l'aime. Il y a quelque chose que j'aimerais ajouter à la requête, qui nécessite une sous-requête, mais je ne sais pas trop comment l'écrire.

SELECT CLIENT, 
RESPONSIBILITY, 
SERVICE_LINE, 
STOB, 
PROJECT, 
JE_LINES_NET_ACT_AMOUNT AS "ACTUAL_AMOUNT", 
EFFECTIVE_DATE, 
PERIOD_NAME, 
VENDOR_NAME, 
DISTRIBUTION_SUPPLIER_NAME, 
CASE WHEN JE_LINE_DESCRIPTION='Journal Import Created' THEN 
    AP_DISTRIBUTION_DESCRIPTION ELSE 
    JE_LINE_DESCRIPTION END AS DESCRIPTION, 
CASE WHEN JE_HEADER_NAME LIKE '%Purchase%' THEN 
    INVOICE_NUMBER ELSE 
    JE_HEADER_NAME END AS DOCUMENT_NUMBER 
FROM GL_Detail 
WHERE RESPONSIBILITY BETWEEN '17500' AND '17511' 
    AND EFFECTIVE_DATE BETWEEN '2016/04/01' AND '2017/03/31' 
    AND JE_LINES_NET_ACT_AMOUNT <> 0 

Ci-dessus est un exemple du code que j'utilise pour ma requête. Actuellement, je l'ai en tirant des données pour une gamme de centres de responsabilité (ou centres de coûts). À des fins de reporting, nous avons ces centres de responsabilité à différents niveaux pour l'emplacement et le département. La plupart des utilisateurs veulent extraire les données à l'aide de ces numéros de responsabilité cumulés. Cependant, notre table de détail des transactions GL n'a pas ces colonnes. Ce que je veux être capable de faire: Je veux être capable de définir une série de centres de responsabilité et de les assigner avec leur numéro de responsabilité enroulé que je peux définir. Lorsque je définis le paramètre après le WHERE, je veux être en mesure de définir le numéro de responsabilité enroulé en tant que paramètre.

Est-ce qu'une fonction de cas imbriquée résoudrait ceci après sélection? Ou y a-t-il une autre fonction que je dois utiliser?

Toute aide serait grandement appréciée.

Répondre

0

Vous pouvez utiliser un script PL/SQL pour obtenir ce résultat. Vous utilisez la commande ACCEPT avant votre déclaration. Notez également que parce que je vous fais passer à PL/SQL, j'ai ajouté un point-virgule et une barre oblique à la fin de votre requête.

ACCEPT resp_start NUMBER PROMPT 'Enter responsibility start range: ' 
ACCEPT resp_end NUMBER PROMPT 'Enter responsibility end range: ' 

SELECT 
    . . . 
FROM GL_Detail 
WHERE RESPONSIBILITY BETWEEN '&resp_start' AND '&resp_end' 
AND EFFECTIVE_DATE BETWEEN '2016/04/01' AND '2017/03/31' 
AND JE_LINES_NET_ACT_AMOUNT <> 0; 
/

Voir How do I use variables in Oracle SQL Developer? pour plus d'informations sur les variables substitution. J'espère que ça aide!

0

vous n'avez pas indiqué les types de données de vos colonnes, mais je vois un problème potentiel avec la conversion de type implicite. Pour éviter cela, utilisez des variables de liaison qui correspondent au type de la colonne en cours de sous-ensemble.