begin process at 2010 02 10 06:14:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Requêtes

 > 

Select avec résultat induit


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Select avec résultat induit

vendredi 20 février 2009 à 14:29:29 | Select avec résultat induit

Djzlouk

Bonjour les SQLeux :)

J'ai un petit souci avec 2 tables. Je vous explique.

Table Prevu :
Id
User
Temps

Table Realise :
Id
User
Temps

J'ai aussi des liens :
Prevu.Id = Realise.Id
Prevu.User = Realise.Id

Dans ma table Prevu j'ai 444 enregistrements et dans ma table Realise j'ai 148 enregistrements.

En réalité, dans ma table Prevu, je renseigne tout ce que je prévois de travailler et dans ma table realise c'est ce que j'ai réellement pointé. C'est pour cela que j'ai moins d'enregistrement dans la table realise.

Ma problématique est simple, je veux connaitre ma charge, donc (Prevu.Temps - Realise.Temps) = Charge.

Ce que j'ai fait c'est :
SELECT (Prevu.Temps - Realise.Temps) AS Charge
FROM Prevu JOIN Realise
WHERE Prevu.Id = Realise.Id AND
Prevu.User = Realise.Id

Mais cela me retourne que 148 resultats, alors que si le realise n'existe pas encore j'aimerais que le temps soit à 0 et donc que cela affiche que le Prevu.temps en face de l'Id et du User


Quelqu'un a t il une idée ?

Merchi :)
vendredi 20 février 2009 à 15:58:41 | Re : Select avec résultat induit

ed73

En SQL Server ça pourrait être

SELECT Prevu.Id, Prevu.User,
CASE WHEN  Realise.Temps is not null
Prevu.Temps - Realise.Temps
ELSE Prevu.Temps END
AS Charge
FROM Prevu LEFT OUTER JOIN Realise ON (Prevu.Id = Realise.Id AND
Prevu.User = Realise.Id)

En Access

SELECT Prevu.Id, Prevu.User,
IIF(Realise.Temps is not null,Prevu.Temps - Realise.Temps,Prevu.Temps)
AS Charge
FROM Prevu LEFT OUTER JOIN Realise ON (Prevu.Id = Realise.Id AND
Prevu.User = Realise.Id)

vendredi 20 février 2009 à 16:01:13 | Re : Select avec résultat induit

ed73

Il y a aussi un truc qui ne va pas dans ta requête, la jointure devrait être :

(Prevu.Id = Realise.Id AND Prevu.User = Realise.User)

dimanche 1 mars 2009 à 21:26:09 | Re : Select avec résultat induit

Malkuth

Membre Club
Réponse acceptée !

un truc aussi, je ne connait pas toute ta base de donné mais je vois pas l'intéret des 2 table,

tu pourais faire
Table Travail :
Id
User
TempsPrevus
Fait (type booleen)
TempsReel

voir même, tu fais

Table Travail :
Id
User
TempsPrevu
TempsReel

en autorisant Null dans la colone TempsReel et si temps Réel = NULL alors c'est que le travaille n'est pas fait mais bon concernant l'indexation se seras sans doute plus efficace de prendre la premiére solution, ce qui donnerais la requette suivante sur SQLServeur

SELECT (TempsPrevu - CASE Fait WHEN 1 THEN TempsReel ELSE 0 END) AS Charge FROM Travaille

Et si cette requette est utiliser souvent tu fais même un champ calculer


Table Travail :
Id
User
TempsPrevu
Fait (type booleen)
TempsReel
Charge (TempsPrevu - CASE Fait WHEN 1 THEN TempsReel ELSE 0 END)

ca donne la définition de table suivante :

CREATETABLE [dbo].[Travail](
   [Id] [int] NOTNULL,
   [User] [int] NOTNULL,
   [TempsPrevu] [int] NOTNULL,
   [Fait] [bit] NOTNULL,
   [TempsReel] [int] NOTNULL CONSTRAINT [DF_Travail_TempsReel] DEFAULT((0)),
   [Charge] AS([TempsPrevu]-case [Fait] when(1)then [TempsReel] else(0)end) PERSISTED,

   CONSTRAINT
[PK_Travail] PRIMARYKEYCLUSTERED( [Id] ASC)
   
WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)
)

Le mot clef Persisted indique au moteur de calculer la valeur de Charge lors de la modifications de Fais/TempsReel/TempsPrevu plutot qu'au moment de la selection, vu que ces champs ne sont sans doute pas modifier trés souvent sa te fais gagner pas mal en performance.

aprés tu fais un select tout se qu'il y'a de plus banal :

SELECT Charge FROM Travail ^^ et en plus tu peus indexé Charge si t'en as besion dans des condition de requette (genre voir les traveaux dont la charge dépasse 100...



Cette discussion est classée dans : table, temps, id, prevu, realise


Répondre à ce message

Sujets en rapport avec ce message

if dans une procédure stocké ? [ par jesusonline ] Bonjour, je ne connais pas encore SQLj'ai une table articles qui a un champ ID et je voudrais une fonction stocké qui prend en paramètre un ID et qui Selectionner les lignes dont un champ apparait plusieurs fois [ par bluebird_29200 ] Bonjour a tous ! sur la table reservations client_id  |  transaction_id je cherche a faire ressortir les client_id dont le nombre d'apparitions dep requete croisement de table [ par sdisp ] Bonjour, je souhaiterais pouvoir croiser des ligne dans mon tableau, je expliques, j'ai une table de se genre: id id_suivant référence 1 3 10 2 1 1 Problème de requête à double jointure ... HELP ! [ par vladam ] Hello,Voici mon problème.J'ai une table "Table_3" avec 3 champsle premier ID numériquele deuxième ID2 numériquele troixième ID3 numériquej'ai une seco une requete qui me casse la tête [ par chmouette ] Salut les gens!Mon problème est purement SQL. J'ai une table Ma Table avec des champs tels que :+-------------------------+ !            MaTable  &nbs auto increment [ par bob ] Bonsoir ! Alors voila, j'ai une question qui va etre surement trés simple pour vousvoila le sql de mla table CREATE TABLE `blogs` ( `id` smallint(6) requête sur le résultat d'une requête [ par sev622 ] Bonjour, J'ai un problème dans la construction de ma requête. J'ai une table avec 2 champs numériques : id_p, id_f Je veux compter le nombre d'id_p qu erreur 1785 [ par sev622 ] Bonjour, Je crée des tables avec pas mal de foreign key et j'ai l'erreur suivante :Serveur : Msg 1785, Niveau 16, État 1, Ligne 1L'introduction d'une help pour requete SQL [ par lenneth666 ] Voila j'ai une table avec les champs suivants : ens_id form_id mat_id annee_id nb ens_id,form_id et mat_id sont une clé composé de cette table. La INSERT a l'id qu'on vient de DELETE [ par Bassman ] Voila j'aimerais savoir sous mysql comment forcé l'insertion dès le "départ", c'est a dire, par exemple dans votre table utilisateur vous venez d'en s


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales