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

MS SQL Server Discussion :

simuler GREATEST en MS SQL


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut simuler GREATEST en MS SQL
    Bonjour,

    je suis entrain de porter une appli de Oracle vers MS SQL server et j'aurai aimé savoir si il existe une manière simple de remplacer GREATEST qui est spécifique à Oracle

    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    je ne connais pas en sql serveur

    d'ailleurs connaitre le max d'une liste DEFINIE n'est pas du SQL

    peux-tu mettre le code de ta requete Oracle ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    C'est bon j'y suis arrivé

    Le problème était de creer une colonne avec pour chaque ligne le plus grand de plusieurs autres champs avec des "priorites" sur certains et des regles differentes en fonction du fait qu'ils soient Null ou pas (la table temporaire sur lequel se fait ce "traitement" est issu de multiples jointures OUTER).
    bref

    En fait il suffit d'utiliser un enchainement de CASE WHEN dans les attributs puis d'aliasser tout ça dans une colonne cible.

    désolé pour l'explication foireuse mais je fait de la bdd depuis très peu, je ne possède pas le jargon addapté.

    voila un petit bout de la requete (en fait une longue suite d'union) qui a mon avis n'est pas vraiment optimisée (ni très claire)...

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    SELECT * FROM(
     
    SELECT 
    TOP 20
    ID_DEMANDE,
    DEM_NO,
    TITRE,
    ptouttiers.DATE_CREATION as CREATIONDATE,
    CREATED_BY_PERSONNE,
    DEM_TYPE,
    ptouttiers.ID_TIERS as TIERSID,
     
    TI_NOM,
    ptouttiers.ID_PRODUIT as PRODID,
    NOM_PRODUIT,
    ID_SOCIETE,
    ID_AFFECTATION,
     
    DATE_RESOLUTION,
    ID_TRAITEMENT, 
    ID_SOC_T, 
    ID_AFF_T, 
     
    DATE_RES_T,
     
     
    CASE WHEN DEM_ETAT_T IS NULL THEN DEM_ETAT
    ELSE DEM_ETAT_T
    END AS DEM_ETAT_FIN,
     
    CASE WHEN ID_SOC_T IS NULL THEN ID_SOCIETE
    ELSE ID_SOC_T
    END AS ID_SOC_FIN
    FROM 
    (SELECT *
    FROM
     
    (SELECT *
    FROM
    (SELECT * FROM (
    SELECT DISTINCT p2.ID_DEMANDE as dem2, p1.higher
    FROM  (
    SELECT  p1.ID_DEMANDE as dem, higher=MAX(p1.ID_TRAITEMENT)
    		FROM DEMANDE_TRAITEMENT p1
    		GROUP BY p1.ID_DEMANDE
     
    )AS p1 INNER JOIN DEMANDE_TRAITEMENT p2 
    ON p1.higher =  p2.ID_TRAITEMENT AND dem = p2.ID_DEMANDE
     
    )AS p2
    RIGHT OUTER JOIN DEMANDES pd
    ON pd.ID_DEMANDE = dem2
    )AS pegle
    LEFT OUTER JOIN (SELECT DISTINCT
    plast.ID_TRAITEMENT, 
    plast.ID_SOCIETE AS ID_SOC_T, 
    plast.ID_AFFECTATION AS ID_AFF_T, 
    plast.DEM_ETAT AS DEM_ETAT_T ,
    plast.DATE_RESOLUTION AS DATE_RES_T
    FROM DEMANDE_TRAITEMENT plast) AS plast
     
    ON pegle.higher = plast.ID_TRAITEMENT ) AS ptout
    LEFT OUTER JOIN (
    	SELECT TI_NOM, ID_TIERS AS tiers
    	FROM N_TIERS ptiers ) AS ptiers
    ON ptiers.tiers = ptout.ID_TIERS ) AS ptouttiers
    LEFT OUTER JOIN N_PRODUIT pprod
    ON pprod.ID_PRODUIT = ptouttiers.ID_PRODUIT
    WHERE DEM_ETAT = 6 AND DEM_ETAT_T = 6
     
    ORDER BY CREATIONDATE DESC) as tabletest1
     
     
    UNION
     
    SELECT * FROM(
    SELECT 
    TOP 15
    ID_DEMANDE,
    DEM_NO,
    TITRE,
    ptouttiers.DATE_CREATION as CREATIONDATE,
    CREATED_BY_PERSONNE,
    DEM_TYPE,
    ptouttiers.ID_TIERS as TIERSID,
     
    TI_NOM,
    ptouttiers.ID_PRODUIT as PRODID,
    NOM_PRODUIT,
    ID_SOCIETE,
    ID_AFFECTATION,
     
    DATE_RESOLUTION,
    ID_TRAITEMENT, 
    ID_SOC_T, 
    ID_AFF_T, 
     
    DATE_RES_T,
     
    CASE WHEN DEM_ETAT_T IS NULL THEN DEM_ETAT
    ELSE DEM_ETAT_T
    END AS DEM_ETAT_FIN,
     
    CASE WHEN ID_SOC_T IS NULL THEN ID_SOCIETE
    ELSE ID_SOC_T
    END AS ID_SOC_FIN
    FROM 
    (SELECT *
    FROM
     
    (SELECT *
    FROM
    (SELECT * FROM (
    SELECT DISTINCT p2.ID_DEMANDE as dem2, p1.higher
    FROM  (
    SELECT  p1.ID_DEMANDE as dem, higher=MAX(p1.ID_TRAITEMENT)
    		FROM DEMANDE_TRAITEMENT p1
    		GROUP BY p1.ID_DEMANDE
     
    )AS p1 INNER JOIN DEMANDE_TRAITEMENT p2 
    ON p1.higher =  p2.ID_TRAITEMENT AND dem = p2.ID_DEMANDE
     
    )AS p2
    RIGHT OUTER JOIN DEMANDES pd
    ON pd.ID_DEMANDE = dem2
    )AS pegle
    LEFT OUTER JOIN (SELECT DISTINCT
    plast.ID_TRAITEMENT, 
    plast.ID_SOCIETE AS ID_SOC_T, 
    plast.ID_AFFECTATION AS ID_AFF_T, 
    plast.DEM_ETAT AS DEM_ETAT_T ,
    plast.DATE_RESOLUTION AS DATE_RES_T
    FROM DEMANDE_TRAITEMENT plast) AS plast
     
    ON pegle.higher = plast.ID_TRAITEMENT ) AS ptout
    LEFT OUTER JOIN (
    	SELECT TI_NOM, ID_TIERS AS tiers
    	FROM N_TIERS ptiers ) AS ptiers
    ON ptiers.tiers = ptout.ID_TIERS ) AS ptouttiers
    LEFT OUTER JOIN N_PRODUIT pprod
    ON pprod.ID_PRODUIT = ptouttiers.ID_PRODUIT
    WHERE DEM_ETAT = 5 AND DEM_ETAT_T = 5
     
     
     
    ORDER BY  ptouttiers.DATE_CREATION DESC) AS tabletest2
    ORDER BY DEM_ETAT_FIN ASC, CREATIONDATE DESC

Discussions similaires

  1. [SQL] Select greatest
    Par valoji dans le forum Informix
    Réponses: 1
    Dernier message: 26/03/2007, 18h09
  2. Simuler un OR exclusif sous T-SQL
    Par mehdi82 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/06/2006, 12h02
  3. [MySQL] Simuler l'exécution d'une requête (my)sql
    Par slimane.3 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 24/05/2006, 21h16
  4. Simulation de la fonction LIMIT de MySQL avec SQL Server
    Par Le Pharaon dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 15/11/2005, 10h43
  5. [T-SQL] COmment simuler la fonction isnumeric ?
    Par SegmentationFault dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 02/11/2005, 16h57

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