IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Type de données du littéral


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Par défaut Type de données du littéral
    Bonjour le forum,
    je viens pour la première fois poster un problème que j'ai sur une requête SQL.

    voici la requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    with CodeReception as (
    SELECT DISTINCT
    A.NOROHE as NOR, 
    case when B.NUMORC is not null then 'Frais' when C.NUMOR is not null then 'Sec' when D.NUORDO is not null then 'Métier' else '' end as Type
    from LODTA.ELHEAVP0 A
    left join LODTA.BCPECDFO B ON A.NOROHE=B.NUMORC
    left join LODTA.GSPORLF C ON A.NOROHE=C.NUMOR
    left join LODTA.FODORMP0 D ON A.NOROHE=D.NUORDO
    ),
    NbreColis as (
    SELECT
    NOR,
    TYPE,
    case TYPE when 'Frais' then B.QTCURE when 'Sec' then C.QTSTF when 'Métier' then D.QTRECUC else '' end as CumColis
    from CodeReception A
    left join LODTA.BCPDCDFO B on A.NOR = B.NUMORC
    left join LODTA.GSPORLF C on A.NOR = C.NUMOR
    left join LODTA.TCRFCPP0 D on A.NOR = D.NUORWF
    ),
    Commentaire as (
    SELECT 
    NOR,
    TYPE,
    CUMCOLIS,
    case TYPE when 'Sec' then E.COMCD1 when 'Frais' then C1.TEXTLX else '' end as ligne1,
    case TYPE when 'Sec' then E.COMCD2 when 'Frais' then C1.TEXTLX else '' end as ligne2,
    case TYPE when 'Sec' then E.COMCD3 when 'Frais' then C1.TEXTLX else '' end as ligne3,
    case TYPE when 'Sec' then E.COMCD4 else '' end as ligne4
    from NbreColis A
    left join LODTA.BCPECDFO B on A.NOR = B.NUMORC
    left join LODTA.BCPCCDFO C1 on B.NCDEFO = C1.NCDEFO AND C1.NOLIGN = 1
    left join LODTA.BCPCCDFO C2 on B.NCDEFO = C2.NCDEFO AND C2.NOLIGN = 2
    left join LODTA.BCPCCDFO C3 on B.NCDEFO = C3.NCDEFO AND C3.NOLIGN = 3
    left join LODTA.GSPORLF D on A.NOR = D.NUMOR
    left join LODTA.GSPCDFRE E on D.NCDEFO = E.NCDEFO
    )
    select 
    C.CACTHP,
    D.LACTAT,
    A.NENTHE,
    E.LEN1EN,
    L.TYPE,
    A.DENLHE,
    A.NFOUHE,
    A.FILIHE,
    '', 
    J.INFOTB,
    H.CPOSLF concat ' ' concat VILLLF,
    A.NOROHE,
    '',
    L.CUMCOLIS,
    A.POCFHE,
    SUBSTRING(COENLVT, 1, 30),
    SUBSTRING(COENLVT, 61, 30),
    A.NTRPHE,
    K.RSO1FO,
    SUBSTRING(COENLVT, 31, 30),
    SUBSTRING(COENLVT, 91, 30),
    L.LIGNE1,
    L.LIGNE2,
    L.LIGNE3,
    L.LIGNE4
    from LODTA.ELHEAVP0 A
    left join DBLIB.DBFDEPP0 B ON A.NFOUHE=B.NFOUFA AND A.DACTHE=B.DACTFA
    left join DBLIB.DBCHPRP0 C ON B.CCPRFA = C.CCPRHP
    left join DBLIB.DBACTIP0 D ON C.CACTHP=D.CACTAT
    left join DBLIB.DBENTRP0 E ON A.NENTHE=E.NENTEN
    left join DBLIB.DBFILFP0 G ON A.NFOUHE=G.NFOUFF AND A.FILIHE=G.FILIFF
    left join DBLIB.DBLFOFP0 H ON G.NFOUFF=H.NFOULF
    left join DBLIB.DBEBENP0 I ON A.BAREHE=I.BAREBE
    left join DBLIB.DBTABLP0 J ON I.ZODPBE=J.CLTBTB AND NMTBTB = 'ZGE' AND NDOSTB = '001'
    left join DBLIB.DBFOURP0 K ON A.NFOUHE=K.NFOUFO
    left join Commentaire L ON A.NOROHE = L.NOR
    voici mon problème:
    Je souhaite supprimer les lignes en double dans mon extraction, je connais deux solutions:


    1-Utiliser le mot clef "Distinct" après le "SELECT" (dans le cas où on à déja un "group by" dans la requête, si je me souviens bien)

    2-Si pas de "group by", la meilleure solution est de grouper toute mes données avec un "group by" (toujours si je me souviens bien)

    mais là pour ces deux solutions, deux problèmes m'arrivent:

    1-ma requête passe outre mon Distinct, sans message d'erreur

    2-J'obtiens le message d'erreur suivant: "SQL0678 - Le type de données du littéral *N n'est pas compatible avec la colonne *N."


    Merci pour toute aide ou réflexion susceptible de me faire avancer.

    sincèrement

  2. #2
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour,
    L'instruction DISTINCT s'utilise seule, sans le GROUP BY, et c'est la méthode la plus propre. Le GROUP BY est prévu pour faire une agrégation, par exemple pour calculer des totaux.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT Service FROM Employes
    listera les services de la table des employés avec seulement une ligne par service.

    Quel est le résultat obtenu avec le DISTINCT ? Peux-tu nous donner la requête utilisée et le résultat ?

  3. #3
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Citation Envoyé par supierre Voir le message
    SQL0678 - Le type de données du littéral *N n'est pas compatible avec la colonne *N.
    Ca ressemble à une erreur DB2 et ici c'est un forum Oracle...
    Cordialement,
    Franck.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Par défaut
    En effet c'est du DB2

    désolé de vous avoir embêtés, je vais poster celà à l'endroit approprié

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/01/2013, 13h13
  2. Type pour données de type email avec @
    Par jeff37 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/01/2004, 14h50
  3. Types de données interbase
    Par Clotilde dans le forum InterBase
    Réponses: 2
    Dernier message: 18/11/2003, 14h10
  4. Réponses: 2
    Dernier message: 22/09/2003, 11h23
  5. Convertir un type de donnée sous SQL Server
    Par Fleep dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/08/2003, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo