Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
salut
je voudrais un champ computed dans une table avec une expression conditionnele.
1) en sql ANYWHERE ca marche tres bien en introduisant l'expression dans la case value(computed value)
example : if champ1 < 0 then - champ1 else champ2 endif
2) en SQL SERVER: comment peux je traduire ca?
quelqu'un peut m'aider??
MERCI
Hors ligne
Salut, ça fait longtemps que je n'ai pas fait de transact SQL, mais je me demande s'il n'existe pas un équivalent du CASE de PL-SQL:
SELECT AVG(CASE WHEN e.salary > 2000 THEN e.salary ELSE 2000 END) "Average Salary" from employees e;
Si quelqu'un d'autre pouvait confirmer...
Hors ligne
oui..
mais ca c'est as ma question!!!
moi je parles de COMPUTED COLUMN dans la table.
MERCI
Dernière modification par azuldev (24-04-2007 11:46:45)
Hors ligne
azuldev a écrit:
if champ1 < 0 then - champ1 else champ2 endif
Salut, en principe un computed est propre à PB et indépendant du SGBDR... Ton exemple en expression de compute donnerait :
if( champ1 < 0, -champ1, champ2 )
Si c'est en SQL que tu veux le résultat directement dans une colonne de la DW sans utiliser de computed :
select case when champ1 < 0 then -champ1 else champ2 end, .... from ... where ...
Hors ligne
Salut
Non pas propre a PB:-:
1) j'ai une 10ene de champs dans une table SQLANYWHERE. ca marche tres bien.
2) j'ai des champs computed dans des tables en SQLSERVER example TTC AS HT + TVA
Donc j'attaque la base de données avec PB et ASP dans les deux cas les COMPUTED COLUMN marche bien!!
mais ce que je ne sais pas faire c'est d'introduire une expression conditionnelle!!!
Je préfère cette méthode pour des raisons:
1 ) Eviter les requettes en +.
2 ) Garder la "portabilité" de la base.
MERCIII
Hors ligne
azuldev a écrit:
mais ce que je ne sais pas faire c'est d'introduire une expression conditionnelle!!!
As-tu essayé une expression de compute dans ce genre :
if( champ1 < 0, -champ1, champ2 )
Hors ligne
peut etre comme ici ?
http://fadace.developpez.com/mssql/pivot/
Hors ligne
J'ai essayé ...erreur de compilation syntax incorrecte.
mais La Syntax SQL SERVER est : IF .. THEN .. ELSE ... END
MERCII
Hors ligne
J'ai deja consulté ... developpez.com j'ai pas trouvé!!
MERCII
Hors ligne
Bonjour,
Personnellement, je n'ai jamais mis d'expression conditionnelle de type "CASE" dans la définition d'une COMPUTED COLUMN. Si cela est possible, ça doit être marqué dans l'aide en ligne de M$ SQLServer (je n'ai pas travaillé sur ce SGBD depuis près de 7 ans, ce qui fait que je suis un peu "rouillé").
Cependant, je ne vois pas pourquoi ça ne pourrait pas marcher...
Sinon, il reste la solution de créer des fonctions:
http://msdn.microsoft.com/msdnmag/issue … spx?loc=fr
Si quelqu'un d'autre a déjà été confronté à cette problématique, qu'il n'hésite pas à le signaler...
Hors ligne
Je dis, les expressions conditionnelles (IF) ne marche pas mais les (CASE) marche.
et je cherche pour les (IF).
MERCII
Hors ligne
azuldev a écrit:
Je dis, les expressions conditionnelles (IF) ne marche pas mais les (CASE) marche.
et je cherche pour les (IF).
MERCII
tu ne peux pas pour le (IF), à moins de faire une procédure stockée et tout et tout...
le CASE WHEN THEN END, remplace le if justement !
tu peux faire des CASE imbriqués, comme les if... et ca fonctionne bien !
Hors ligne
Exactement, c'est la solution.
et j'utilise aussi les TRIGGERs aulieu des SPs
MERCI
Hors ligne
Salut
j'ai utilisé les column computed avec CASE au lieu IF, mais quelqu'un pourrait me dire dire comment utiliser les COLUMN COMPUTED imbriqués??
exple :
PHT,QTE et R des colonnes normales dans la DATABASE
[PTTC] AS PH * QTE
on utilise la Colonne COMPUTED "PTTC" dans une autre colonne "PTTCR" : [PTTC] AS PTTC - R
MeRcI
Hors ligne
azuldev a écrit:
Salut
j'ai utilisé les column computed avec CASE au lieu IF, mais quelqu'un pourrait me dire dire comment utiliser les COLUMN COMPUTED imbriqués??
exple :
PHT,QTE et R des colonnes normales dans la DATABASE
[PTTC] AS PH * QTE
on utilise la Colonne COMPUTED "PTTC" dans une autre colonne "PTTCR" : [PTTC] AS PTTC - R
MeRcI
salam azul, tu donnes un nom à ton compute PTTC, par exemple compute_pttc (dans le painter, properties, onglet general,name), ensuite tu peux utiliser ce nom comme une variable dans un autre computed, par exemple :
if( compute_pttc > 0, compute_pttc, -compute_pttc )
Hors ligne
ALAYKA ASSALAM
merci eRaSorZ
mais je parle des COLUMN COMPUTED SQL SERVER pas dans PB
et COLUMN COMPUTED dans la table et pas dans la requete.
MeRcI
Hors ligne
Salut azuldev,
Je ne sais pas si ce que tu demandes est possible sous SQL Server: J'ai trouvé ceci sous msdn:
computed_column_expression
Is an expression defining the value of a computed column. A computed column is a virtual column not physically stored in the table. It is computed from an expression using other columns in the same table. For example, a computed column can have the definition: cost AS price * qty. The expression can be a noncomputed column name, constant, function, variable, and any combination of these connected by one or more operators. The expression cannot be a subquery.
Sinon, il y a peut-être une erreur dans ta définition:
azuldev a écrit:
on utilise la Colonne COMPUTED "PTTC" dans une autre colonne "PTTCR" : [PTTC] AS PTTC - R
J'écrirais plutôt ça comme ceci:
PTTCR AS PTTC - R
Hors ligne
Salut foon
i read this in msdn. je comprend bien que les COMPUTED ne sont que des champs logiques!!
peut etre les COMPUTED imbriqués sont non_autorisés dans l'SQL SERVER.
j'ai fait autrement mais it's very very slow, j'ai utilisé les TRIGGERs
or ca marche tres sous SQL ANYWHERE.
MERCI
Dernière modification par azuldev (04-05-2007 12:13:38)
Hors ligne
azuldev a écrit:
mais je parle des COLUMN COMPUTED SQL SERVER pas dans PB
Salut, alors tu t'es trompé de forum pour ton post, ici c'est PB...
azuldev a écrit:
j'ai fait autrement mais it's very very slow, j'ai utilisé les TRIGGERs
Ils font quoi les triggers ?
Hors ligne
salut
J'ai appris que PB n'est pas une base de données!! sinon tu n'as pas lu le titre " Base de données"
en bref selon ma recherche :impossible de faire des COMPUTED imbriqués ds SQLSERVER!!
MeRcI
Hors ligne