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

Développement SQL Server Discussion :

Requête avec champ calculé


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Requête avec champ calculé
    Bonjour,

    Actuellement je bloque sur une requête, en fait je veux créer une vue qui récupère un ID et une date depuis une table.
    Mais en plus je veux ajouter un quatrième champ qui calcule une date qui dépend de l'ID:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
    REQUEST_ID ,ACTION_ID,START_DATE_UT,
    --------Requete du 4éme champ:------------
    
    (select end_date_ut from AM_ACTION where ACTION_ID=(
    		select max(ACTION_ID) from AM_ACTION where 
    			request_id =AM_ACTION.REQUEST_ID  and
    				ACTION_LABEL_EN='On Hold' and action_id< (
    						select ACTION_ID from AM_ACTION
    							 where STATUS_ID_ON_TERMINATE=26 and request_id = REQUEST_ID and ACTION_LABEL_EN='End of On Hold')))AS date_fin
    	
    FROM AM_ACTION 
    where STATUS_ID_ON_TERMINATE=26 and ACTION_LABEL_EN='End of On Hold'
    Bien entendu la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select ACTION_ID from AM_ACTION where STATUS_ID_ON_TERMINATE=26 and request_id = REQUEST_ID and ACTION_LABEL_EN='End of On Hold'
    Retourne plusieurs réponses et donc j'ai une erreur, mais en spécifiant un ID j'ai bien les résultats.

    ça serait simple de passer par des variables mais j'ai besoin de créer un vue (Contraintes applicatives Oblige), ce qui me complique la vie...

    Je crois qu'il faut revoir le fond de la construction de ma requête mais j'ai besoin d'un bout de fil.

    Merci d'avance.
    Cordialement,

  2. #2
    Invité
    Invité(e)
    Par défaut
    est-ce que vous connaissez les jointures ?
    Utilisez-les !!!

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour la réponse, mais là je parle de la même table sur toutes les sous requêtes, est ce que je dois utiliser la jointure sur la même table au niveau de la requête de niveau le plus inférieur (J'ai essayé mais cela ne marche pas)?

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Ce qui est assez curieux avec la requête, c'est que :

    • elle ne spécifie qu'une seule table : dbo.AM_ACTION
    • le filtre de la sous-requête la plus imbriquée est le même que celui de la requête principale.


    Outre le fait qu'elle ne spécifie non plus aucune jointure, ou par exemple l'opérateur APPLY, vous devriez utiliser des alias.
    Une utilisation de ceux-ci vous permettent de spécifier plusieurs fois la même table sous des références différentes.

    Je me suis permis de formater un peu la requête pour essayer de vous guider :

    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
    SELECT	REQUEST_ID
    	, ACTION_ID
    	, START_DATE_UT
    	, (
    		SELECT	end_date_ut
    		FROM	dbo.AM_ACTION AS AA
    		WHERE	ACTION_ID =
    			(
    				SELECT	MAX(ACTION_ID)
    				FROM	dbo.AM_ACTION AS AAA
    				WHERE 	request_id = AM_ACTION.REQUEST_ID
    				AND	ACTION_LABEL_EN = 'On Hold'
    				AND	action_id <
    					(
    						SELECT	ACTION_ID
    						FROM	dbo.AM_ACTION AS AAAA
    						WHERE	STATUS_ID_ON_TERMINATE=26
    						AND	request_id = REQUEST_ID
    						AND	ACTION_LABEL_EN = 'End of On Hold'
    					)
    			)
    	) AS date_fin
    FROM	dbo.AM_ACTION AS A
    WHERE	STATUS_ID_ON_TERMINATE = 26
    AND	ACTION_LABEL_EN='End of On Hold'
    Des éléments sont en gras : c'est soit pour indiquer l'introduction d'un alias de table, soit pour indiquer que l'on devrait voir les alias de table sur la ligne de code en question.
    Par exemple, ligne 18, on devrait voir, je pense, AND AAAA.request_id = A.REQUEST_ID

    @++

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour elsuket,
    Désole pour la réponse tardive et merci pour ton aide, je crois que par construction SQL exécute en premier lieu la sous requête du niveau inférieur et remonte jusqu’à la requête principale, ce qui fait que ma requête (Code affiché) retourne plusieurs valeurs, car on n'a pas encore de valeur sélectionné pour A.REQUEST_ID

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    					SELECT	ACTION_ID
    						FROM	AM_ACTION AS AAAA
    						WHERE	STATUS_ID_ON_TERMINATE=26
    						AND	AAAA.request_id = A.REQUEST_ID
    						AND	ACTION_LABEL_EN = 'End of On Hold'
    Du coup je me demande: 1- Ce raisonnement est il vrai (raisonnement sur l’ordre de l'exécution)?
    2- peut_on récupérer l'ID sélectionné au premier Select (Requête Principale), et l'utiliser au niveau de la sous requête?

Discussions similaires

  1. [AC-2003] Requête avec champ calculé multi-critère : je cale
    Par gandalf20000000 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/09/2009, 18h31
  2. RechDom avec une Requête et Champs Calculé !
    Par Jawad-smart dans le forum IHM
    Réponses: 5
    Dernier message: 14/06/2008, 19h51
  3. [WD9] requête avec champ calculé
    Par gbzmt dans le forum WinDev
    Réponses: 9
    Dernier message: 29/04/2008, 12h02
  4. Recordset d'une requête avec champ calculé
    Par gbzmt dans le forum VBA Access
    Réponses: 6
    Dernier message: 13/02/2008, 20h22
  5. Recordset d'une requête avec champ calculé
    Par gbzmt dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/02/2008, 07h37

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